Android启动另一个APP时,注意disable与enable的问题

 在写游戏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                       }

 

posted @ 2016-01-12 17:39  TwoFish  阅读(3256)  评论(0编辑  收藏  举报