在写游戏sdk时候遇到了一个需要在sdk中通过scheme来启动支付宝的免密支付功能,所以需要在设备中通过包名检查一下支付宝是否存在。
此时遇到了一个问题,在三星设备中可以将app给处于disable状态:
1 PackageManager packageManager = getPackageManager(); 2 List<ApplicationInfo> list1 = packageManager 3 .getInstalledApplications(128); 4 if (list1.size() != 0) { 5 for (ApplicationInfo info : list1) { 6 // 如果是false,代表application里的所有组件都禁用 7 boolean enable = info.enabled; 8 Log.i(TAG, "enable: " + enable); 9 if (enable == false) { 10 Log.e(TAG, "false:" + info.packageName); 11 } 12 Log.i(TAG, "======================================="); 13 } 14 }
此时照例去启动联系人这个app:
1 Intent intent=new Intent(); 2 intent=manager.getLaunchIntentForPackage("com.android.contacts"); 3 startActivity(intent);
会出现异常:
但是当将这个app重置于enable状态时:就可以成功启动!
所以,之后在启动三方的app时候,一定要检查对应的状态,处于enable状态时候才去启动:
1 String packageName = "com.android.contacts" ; 2 try { 3 PackageManager manager = MainActivity.this.getPackageManager(); 4 //1) 先通过adb命令找出packageName获取相应的PackageInfo 5 PackageInfo packageInfo = manager.getPackageInfo(packageName, 0); 6 ApplicationInfo applicationInfo = packageInfo.applicationInfo; 7 8 //2) 通过applicationInfo.enabled来判断应用是否可用 9 boolean enabled = applicationInfo.enabled; 10 if (enabled) { 11 Log.e(TAG, "此时处于enabled状态"); 12 Intent intent=new Intent(); 13 intent = manager.getLaunchIntentForPackage(packageName); 14 startActivity(intent); 15 } 16 else{ 17 Log.e(TAG, "此时处于disable状态"); 18 } 19 } catch (PackageManager.NameNotFoundException e) { 20 Log.e(TAG, "此时没有这个app"); 21 e.printStackTrace(); 22 }