Android 常用的函数记录
生活随笔
收集整理的這篇文章主要介紹了
Android 常用的函数记录
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
目錄
一, 設置所有App默認授予權限
二,設置默認Launcher
三,設置默認瀏覽器
四,根據包名啟動應用
五,通過反射靜默安裝應用
一, 設置所有App默認授予權限
public void setAllowAllAppPermission(){//獲取PackageManagerPackageManager packageManager = getApplicationContext().getPackageManager();//獲取所有已安裝程序的包信息List<PackageInfo> packageInfos = packageManager.getInstalledPackages(0);//用于存儲所有已安裝程序的包名List<String> packageNames = new ArrayList<>();//從pinfo中將包名字逐一取出,壓入pName list中if (packageInfos != null) {for (int i = 0; i < packageInfos.size(); i++) {String packName = packageInfos.get(i).packageName;packageNames.add(packName);setAppPermission(packName);}}}// 給apk 全部需要的權限 STARTpublic void setAppPermission(String pkgName) {PackageManager pm = getApplicationContext().getPackageManager();AppOpsManager mAppOps = getApplicationContext().getSystemService(AppOpsManager.class);try {PackageInfo pkgInfo = pm.getPackageInfo(pkgName, PackageManager.GET_PERMISSIONS);String sharedPkgList[] = pkgInfo.requestedPermissions;for (int i = 0; i < sharedPkgList.length; i++) {String permName = sharedPkgList[i];PermissionInfo permissionInfo;try {permissionInfo = pm.getPermissionInfo(permName, 0);} catch (PackageManager.NameNotFoundException e) {continue;}final int opCode = AppOpsManager.permissionToOpCode(permName);boolean hasAopsCode = opCode > AppOpsManager.OP_NONE && opCode < AppOpsManager._NUM_OP;String aopStr = AppOpsManager.permissionToOp(permName);boolean hasAopsOp = aopStr !=null;boolean onlyAops = false;final boolean granted = (pkgInfo.requestedPermissionsFlags[i] & PackageInfo.REQUESTED_PERMISSION_GRANTED) != 0;if ((permissionInfo.protectionLevel & PermissionInfo.PROTECTION_MASK_BASE) != PermissionInfo.PROTECTION_DANGEROUS|| (permissionInfo.flags & PermissionInfo.FLAG_INSTALLED) == 0 || (permissionInfo.flags & PermissionInfo.FLAG_REMOVED) != 0) {if (permName.startsWith("android.") && (hasAopsCode || hasAopsOp)) {onlyAops = true;android.util.Log.d(TAG, "permissionName=" + permName +",opCode=" + opCode);} else {continue;}}boolean isAopsAllowed = mAppOps.checkOpNoThrow(opCode, pkgInfo.applicationInfo.uid, pkgInfo.packageName) == AppOpsManager.MODE_ALLOWED;if ((hasAopsCode || onlyAops) && !isAopsAllowed)mAppOps.setMode(opCode, pkgInfo.applicationInfo.uid, pkgInfo.packageName, AppOpsManager.MODE_ALLOWED);if ((hasAopsOp || onlyAops) && !isAopsAllowed)mAppOps.setUidMode(aopStr, pkgInfo.applicationInfo.uid, AppOpsManager.MODE_ALLOWED);if (!granted && !onlyAops) {pm.grantRuntimePermission(pkgName, permName, Process.myUserHandle());}// set flagspm.updatePermissionFlags(permName, pkgName, PackageManager.FLAG_PERMISSION_USER_FIXED | PackageManager.FLAG_PERMISSION_USER_SET| PackageManager.FLAG_PERMISSION_REVIEW_REQUIRED, 0, Process.myUserHandle());}List<AppOpsManager.PackageOps> ops = mAppOps.getOpsForPackage(pkgInfo.applicationInfo.uid, pkgName, null);if(ops == null ||ops.size() == 0)return;for (PackageOps packageOps : ops) {List<OpEntry> entries = packageOps.getOps();if(entries == null || entries.size() == 0)continue;for (OpEntry opEntry : entries) {mAppOps.setMode(opEntry.getOp(), packageOps.getUid(), pkgName, AppOpsManager.MODE_ALLOWED);}}} catch (Exception e) {android.util.Log.e(TAG, "++setAppPermission exception ,the packageName is " + pkgName, e);}}二,設置默認Launcher
public void setDefaultLauncher() {String defaultPackageName = SystemProperties.get("persist.android.launcher.packagename");String defaultActivityName = SystemProperties.get("persist.android.launcher.activityname");Log.d(TAG, "++ setDefaultLauncher defaultPackageName:" + defaultPackageName + ", defaultActivityName:" + defaultActivityName);final PackageManager mPm = getApplicationContext().getPackageManager();// 判斷指定的launcher是否存在if (hasApkInstalled(defaultPackageName)) {// 清除當前默認launcherArrayList<IntentFilter> intentList = new ArrayList<IntentFilter>();ArrayList<ComponentName> cnList = new ArrayList<ComponentName>();mPm.getPreferredActivities(intentList, cnList, null);IntentFilter dhIF = null;for (int i = 0; i < cnList.size(); i++) {dhIF = intentList.get(i);if (dhIF.hasAction(Intent.ACTION_MAIN) && dhIF.hasCategory(Intent.CATEGORY_HOME)) {mPm.clearPackagePreferredActivities(cnList.get(i).getPackageName());}}// 獲取所有launcher activityIntent intent = new Intent(Intent.ACTION_MAIN);intent.addCategory(Intent.CATEGORY_HOME);List<ResolveInfo> list = new ArrayList<ResolveInfo>();list = mPm.queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY);// get all components and the best matchIntentFilter filter = new IntentFilter();filter.addAction(Intent.ACTION_MAIN);filter.addCategory(Intent.CATEGORY_HOME);filter.addCategory(Intent.CATEGORY_DEFAULT);final int N = list.size();// 設置默認launcherComponentName launcher = new ComponentName(defaultPackageName,defaultActivityName);ComponentName[] set = new ComponentName[N];int defaultMatch = 0;for (int i = 0; i < N; i++) {ResolveInfo r = list.get(i);set[i] = new ComponentName(r.activityInfo.packageName, r.activityInfo.name);if (launcher.getClassName().equals(r.activityInfo.name)) {defaultMatch = r.match;}}mPm.addPreferredActivity(filter, defaultMatch, set, launcher);Log.d(TAG, "&& setDefaultLauncher defaultPackageName:" + defaultPackageName + ", defaultActivityName:" + defaultActivityName);}}private boolean hasApkInstalled(String pkgname) {try {getApplicationContext().getPackageManager().getPackageInfo(pkgname, 0);} catch (Exception e) {return false;}return true;}三,設置默認瀏覽器
private void setDefaultBrowser(){String defaultPackageName = SystemProperties.get("persist.android.browser.packagename");String defaultActivityName = SystemProperties.get("persist.android.browser.activityname");Log.d(TAG, "++ setDefaultBrowser defaultPackageName:" + defaultPackageName + ", defaultActivityName:" + defaultActivityName);PackageManager pm = getApplicationContext().getPackageManager();Intent intent = new Intent(Intent.ACTION_MAIN, null);intent.addCategory("android.intent.category.BROWSABLE");List<ResolveInfo> resolveInfoList = pm.queryIntentActivities(intent,0);int size = resolveInfoList.size();ComponentName[] arrayOfComponentName = new ComponentName[size];for (int i = 0; i < size; i++) {ActivityInfo mActivityInfo = resolveInfoList.get(i).activityInfo;String packageName = mActivityInfo.packageName;String className = mActivityInfo.name;ComponentName componentName = new ComponentName(packageName,className);arrayOfComponentName[i] = componentName;if(packageName.equals(defaultActivityName) && className.equals(defaultActivityName)){pm.clearPackagePreferredActivities(packageName);pm.setDefaultBrowserPackageNameAsUser(packageName,0);Log.d(TAG, "&& setDefaultBrowser defaultPackageName:" + defaultPackageName + ", defaultActivityName:" + defaultActivityName);}}}四,根據包名啟動應用
private void doStartApplicationWithPackageName(String packagename) { PackageInfo packageinfo = null;try {packageinfo = mContext.getPackageManager().getPackageInfo(packagename, 0);} catch (NameNotFoundException e) {e.printStackTrace();}if (packageinfo == null) {return;} Intent resolveIntent = new Intent(Intent.ACTION_MAIN, null);resolveIntent.addCategory(Intent.CATEGORY_LAUNCHER);resolveIntent.setPackage(packageinfo.packageName); List<ResolveInfo> resolveinfoList = mContext.getPackageManager().queryIntentActivities(resolveIntent, 0);ResolveInfo resolveinfo = resolveinfoList.iterator().next();if (resolveinfo != null) { String packageName = resolveinfo.activityInfo.packageName; String className = resolveinfo.activityInfo.name; Intent intent = new Intent(Intent.ACTION_MAIN);intent.addCategory(Intent.CATEGORY_LAUNCHER);intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); ComponentName cn = new ComponentName(packageName, className);intent.setComponent(cn);mContext.startActivity(intent);}} }五,通過反射靜默安裝應用
private void installApkInSilence(String installPath,String packageName) {if (installPath == null || installPath.length() == 0) {Log.e(TAG, "installPath: error path");return;}File file = new File(installPath);if (file.length() <= 0 || !file.exists() || !file.isFile()) {Log.e(TAG, "installPath: error file");return;}Class<?> pmService;Class<?> activityTherad;Method method;try {activityTherad = Class.forName("android.app.ActivityThread");Class<?> paramTypes[] = getParamTypes(activityTherad, "getPackageManager");method = activityTherad.getMethod("getPackageManager", paramTypes);Object PackageManagerService = method.invoke(activityTherad);pmService = PackageManagerService.getClass();Class<?> paramTypes1[] = getParamTypes(pmService, "installPackageAsUser");method = pmService.getMethod("installPackageAsUser", paramTypes1);method.invoke(PackageManagerService, installPath, null, PackageManager.INSTALL_REPLACE_EXISTING, packageName, getUse} catch (ClassNotFoundException e) {e.printStackTrace();} catch (NoSuchMethodException e) {e.printStackTrace();} catch (IllegalAccessException e) {e.printStackTrace();} catch (InvocationTargetException e) {e.printStackTrace();} }private Class<?>[] getParamTypes(Class<?> cls, String mName) {Class<?> cs[] = null;Method[] mtd = cls.getMethods();for (int i = 0; i < mtd.length; i++) {if (!mtd[i].getName().equals(mName)) {continue;}cs = mtd[i].getParameterTypes();}return cs; } public static final int PER_USER_RANGE = 100000; public static int getUserId(int uid) {return uid / PER_USER_RANGE; }public String getApkPkgName(String filePath) {if (TextUtils.isEmpty(filePath))return null;PackageManager pm = mContext.getPackageManager();PackageInfo info = pm.getPackageArchiveInfo(filePath,PackageManager.GET_ACTIVITIES);if (info != null) {ApplicationInfo appInfo = info.applicationInfo;String packname = appInfo.packageName;return packname;} else {return null;} } 與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的Android 常用的函数记录的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MTK MtkSettings Sim
- 下一篇: MTK 添加自定义PMS权限 Patch