在写游戏sdk时候遇到了一个需要在sdk中通过scheme来启动支付宝的免密支付功能,所以需要在设备中通过包名检查一下支付宝是否存在。

此时遇到了一个问题,在三星设备中可以将app给处于disable状态:

 PackageManager packageManager = getPackageManager();
List<ApplicationInfo> list1 = packageManager
.getInstalledApplications(128);
if (list1.size() != 0) {
for (ApplicationInfo info : list1) {
// 如果是false,代表application里的所有组件都禁用
boolean enable = info.enabled;
Log.i(TAG, "enable: " + enable);
if (enable == false) {
Log.e(TAG, "false:" + info.packageName);
}
Log.i(TAG, "=======================================");
}
}

此时照例去启动联系人这个app:

 Intent intent=new Intent();
intent=manager.getLaunchIntentForPackage("com.android.contacts");
startActivity(intent);

会出现异常:

但是当将这个app重置于enable状态时:就可以成功启动!

所以,之后在启动三方的app时候,一定要检查对应的状态,处于enable状态时候才去启动:

                  String packageName = "com.android.contacts" ;
try {
PackageManager manager = MainActivity.this.getPackageManager();
//1) 先通过adb命令找出packageName获取相应的PackageInfo
PackageInfo packageInfo = manager.getPackageInfo(packageName, 0);
ApplicationInfo applicationInfo = packageInfo.applicationInfo; //2) 通过applicationInfo.enabled来判断应用是否可用
boolean enabled = applicationInfo.enabled;
if (enabled) {
Log.e(TAG, "此时处于enabled状态");
Intent intent=new Intent();
intent = manager.getLaunchIntentForPackage(packageName);
startActivity(intent);
}
else{
Log.e(TAG, "此时处于disable状态");
}
} catch (PackageManager.NameNotFoundException e) {
Log.e(TAG, "此时没有这个app");
e.printStackTrace();
}

Android启动另一个APP时,注意disable与enable的问题的更多相关文章

  1. Android项目实战(二十二):启动另一个APP or 重启本APP

    一.启动另一个APP 目前公司项目需求,一个主APP,需要打开某些小APP,这些小APP是整合了Unity的,但是还是android程序(所有小APP的包名是已知的). 以前没做过,查询了一下实现方法 ...

  2. Android 一个app启动另一个app

    最近,一个app启动另一个app,这个玩法挺火的嘛,有没有试过更新QQ到5.1版本,QQ的健康里面就可以添加其他app,实现从QQ跳转到其他app应用.这个挺好玩的,一下子带来了多少流量啊. 一.先来 ...

  3. Android在应用中依据包名启动另外一个APP

    以下为TestIntentData工程 MainActivity如下: package cn.testintentdata; import java.util.List; import android ...

  4. Android: 启动另外的APP及传递参数(转)

    转载自:http://blog.csdn.net/iefreer/article/details/8812585 有时候需要从一个APP中启动另外一个APP,比如Twitter/微信等. 如果你不知道 ...

  5. ios 一个app启动另一个app

    问题描述:需要从一个ios应用程序中,能启动另一个ios应用程序. 开发环境:xcode7.3.1 关键词:白名单(LSApplicationQueriesSchemes).注册自己的URL Demo ...

  6. Android在一个APP中通过包名或类名启动另一个APP

    开发有时需要在一个应用中启动另一个应用,比如Launcher加载所有的已安装的程序的列表,当点击图标时可以启动另一个应用.一般我们知道了另一个应用的包名和MainActivity的名字之后便可以直接通 ...

  7. Appium之启动第一个App

    搭建appium自动化环境真是各种问题呀. 如何启动在真机上启动App? 执行操作:操作Android真机上打开手机淘宝app,并搜索“熊猫”. 脚本源码如下: from appium import ...

  8. 启动另一个app

    (一) 通过包名.类名 开发有时需要在一个应用中启动另一个应用,比如Launcher加载所有的已安装的程序的列表,当点击图标时可以启动另一个应用.一般我们知道了另一个应用的包名和MainActivit ...

  9. 初学者用pycharm创建一个django项目和一个app时需要注意的事项

    如何新建一个djiango项目: 1.在pycharm中点击File,选择new project,点击djiango,在右面的Location中将untitile改为你的项目名,其余部分注意见下图: ...

随机推荐

  1. junit 注意事项,切记

    Junit 依赖于 hamcrest jar包,所以在用@Test注解的时候 junit-xxx.jar  hamcrest-core-xx.jar   hamcrest-library-xx.jar ...

  2. C#文件处理

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  3. 将Cygwin Emacs设为Windows explorer默认打开程序

    由于我在平日的学习与工作中会经常用到Cygwin中的Emacs,很自然地想到应该将emacsclient作为指定文件类型在Windows explorer中的默认打开程序.这样,便可以直接双击文件后在 ...

  4. JavaScript简单的一些....

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  5. springIOC

    从这段代码开始 ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml"); Pers ...

  6. 用maven在eclipse用spring建javaweb工程(一)

    一,步骤   只标注重点步骤: 新建工程选择Maven Project next---next---选择web工程 next---命名如下: 点击finish创建完成. 二,index.jsp和pom ...

  7. css和css3学习

    css和css3学习 css布局理解 css颜色大全 样式的层叠和继承 css ::before和::after伪元素的用法 中文字体font-family常用列表 cursor属性 css选择器 F ...

  8. JQuery-常用小组件

    常用的小组件记录 1. 单选框.复选框重置样式效果 参考: http://www.cnblogs.com/sanshi/p/4369375.html 三生石上 参考: http://www.jq22. ...

  9. 从excel读数据到informix的Found a quote for which there is no matching quote错误

    我从excel读取数据,然后存储到Informix数据库里.偶尔会发现出现Found a quote for which there is no matching quote这个错误.调试后发现,是因 ...

  10. HttpHelps类

    /// <summary> /// 类说明:HttpHelps类,用来实现Http访问,Post或者Get方式的,直接访问,带Cookie的,带证书的等方式,可以设置代理 /// 重要提示 ...