是否允许安装非Appstore应用 privatevoidsetNonMarketAppsAllowed(boolean enabled) { // Change the system setting android.provider.Settings.Secure.putInt(getContentResolver(), android.provider.Settings.Secure.INSTALL_NON_MARKET_APPS, enabled ? 1 : 0); } 、 获取首选安装位置type=0 由系统确定 type=1设备内部存取 type=3 可卸载sd卡 privateint getInitInstallType() { return android.provider.Settings.Secure.getInt(getContentResolver(), INSTALL_APP_LOCATION, 0); } 设置 private void setInstallType(int type) { Settings.Secure.putInt(getContentResolver(), INSTALL_APP_LOCATION, type); Settings.Global.putInt(getContentResolver(), Settings.Global.DEFAULT_INSTALL_LOCATION, type); } 设置安装位置 获取所有应用及sd卡应用信息 private List<ApplicationInformation> mSdcardlistAppInfo = new ArrayList<ApplicationInformation>(); private List<ApplicationInformation> mTempSdcardAppInfoList = new ArrayList<ApplicationInformation>(); List<PackageInfo> packages = getPackageManager().getInstalledPackages(0); PackageInfo packageInfo; mTempAppInfoList.clear(); mTempSdcardAppInfoList.clear(); int size = packages.size(); for (int i = 0; i < size; i++) { packageInfo = packages.get(i); if ((packageInfo.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) == 0) { if ((packageInfo.applicationInfo.flags & ApplicationInfo.FLAG_EXTERNAL_STORAGE) != 0) { mSdcardAppInfo = getInfoOfApps(packageInfo); mTempSdcardAppInfoList.add(mSdcardAppInfo); // mTempSdcardAppInfoList sd卡apk信息 } else { mAppInfo = getInfoOfApps(packageInfo); mTempAppInfoList.add(mAppInfo); } } } if (mTempSdcardAppInfoList.size() != 0) { mTempAppInfoList.addAll(mTempSdcardAppInfoList); // mTempAppInfoList所有apk信息 } private ApplicationInformation mSdcardAppInfo; mAppInfo.getAppName(); //apk名字 mAppInfo.getVersionName(); //版本号 formateFileSize(mAppInfo.getTotalSize()); //总计大小 formateFileSize(mAppInfo.getAppSize()); //应用程序大小 formateFileSize(mAppInfo.getDataSize()); //数据大小 formateFileSize(mAppInfo.getCacheSize()));// 缓存大小 private String formateFileSize(long size) { 大小转换成字符串 if (size > 0) { return Formatter.formatFileSize(AppDetailInfoActivity.this, size); } else { return"0KB"; } } 强制停止 privatevoidforceStopPackage(String pkgName) { mActivityManager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE); mActivityManager.forceStopPackage(pkgName); checkForceStop(); } /** * check current application whether stopping. */ privatevoid checkForceStop() { Intent intent = new Intent(Intent.ACTION_QUERY_PACKAGE_RESTART, Uri.fromParts("package", packageName, null)); intent.putExtra(Intent.EXTRA_PACKAGES, new String[] { packageName }); intent.putExtra(Intent.EXTRA_UID, mAppInfo.getUid()); intent.putExtra(Intent.EXTRA_USER_HANDLE, UserHandle.getUserId(mAppInfo.getUid())); sendOrderedBroadcast(intent, null, mCheckKillProcessesReceiver, null, Activity.RESULT_CANCELED, null, null); }卸载apk privatevoid uninstallPkg(String pkgName) { PackageDeleteObserver observer = newPackageDeleteObserver(); getPackageManager().deletePackage(pkgName, observer, 0); Log.d(TAG, "uninstallPkg"); } classPackageDeleteObserverextends IPackageDeleteObserver.Stub { publicvoid packageDeleted(String packageName, int returnCode) throws RemoteException { //执行完删除会调用这个函数,里面内容可以随便改写, returnCode packageName 都是返回参数 //returnCode == PackageManeger.SUCCEEDED 表示卸载成功 } } 清楚数据 privatevoid initiateClearUserData() { // Invoke uninstall or clear user data based on sysPackage if (mClearDataObserver == null) { mClearDataObserver = newClearUserDataObserver(); } if (mActivityManager == null) { mActivityManager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE); } boolean res = mActivityManager.clearApplicationUserData(packageName, mClearDataObserver); if (!res) { // Clearing data failed for some obscure reason. Log.d(TAG, "Couldnt clear application user data for package, " + packageName); } } class ClearUserDataObserver extends IPackageDataObserver.Stub { publicvoid onRemoveCompleted(final String packageName, finalboolean succeeded) { } } 移动apk Private void movepakege(){ if (mPackageMoveObserver == null) { mPackageMoveObserver = new PackageMoveObserver(); } if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) { mMoveFlag = true; if (mPackageManager != null) { mPackageManager.movePackage(mAppInfo.getPackageName(), mPackageMoveObserver, mMoveFlags); } } else { } } classPackageMoveObserverextendsIPackageMoveObserver.Stub { @Override publicvoidpackageMoved(String packageName, int returnCode) throws RemoteException { } }
|