在写游戏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. USACO 4.1 Beef McNuggets

    Beef McNuggetsHubert Chen Farmer Brown's cows are up in arms, having heard that McDonalds is conside ...

  2. 瑶瑶GBK好的,UTF-8卡死

    请求地址: 开发环境核心 esb : http://10.15.22.120:8866/0203000007/EmpAndDptRelateInfoSync/V1 用gbk可以马上返回. 用utf-8 ...

  3. oracle 增加表空间

    1.表空间使用情况 SELECT UPPER(F.TABLESPACE_NAME) "表空间名", D.TOT_GROOTTE_MB "表空间大小(M)", D ...

  4. MVC JsonResult

    public JsonResult GetJson() { var res = new JsonResult(); res.Data = new {isSucceed = true, returnMs ...

  5. 转载:c# string.Format

    C#:STRING.FORMAT数字格式化输出 1.各种常用数字格式化 货币转换 C 或 c(默认小数点后2位.C3后面跟的数字就代表小数后几位)    string.Format("{0: ...

  6. log4j基本使用方法

    通过配置文件可知,我们需要配置3个方面的内容: 1.根目录(级别和目的地) 2.目的地(控制台和文件等) 3.输出样式 Log4j由三个重要的组件构成: 1.日志信息的优先级 日志信息的优先级从高到低 ...

  7. php相关书籍视频

    虽然如今web领域,PHP JSP .NET 并驾齐驱,但PHP用的最广,原因不用我多说. 首先发一个PHP手册,方便查询,这个肯定是学PHP必备的.  下载地址:http://u.115.com/f ...

  8. js数组操作-找出一组按不同顺序排列的字符串的数组元素

    从一组数组中找出一组按不同顺序排列的字符串的数组元素将字符串转换成数组后再对数组进行 sort 排序,abcd 和 bdca 使用 sort 排序后会变成 abcd,将拍好序的字符串作为对象的 key ...

  9. layer ifram 弹出框

    父层 <div class="col-xs-4 text-left" style="padding-left: 50px;"><button ...

  10. Base64encode

    一直以来Base64的加密解密都是使用sun.misc包下的BASE64Encoder及BASE64Decoder的sun.misc.BASE64Encoder/BASE64Decoder类.这个类是 ...