Android启动另一个APP时,注意disable与enable的问题
在写游戏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的问题的更多相关文章
- Android项目实战(二十二):启动另一个APP or 重启本APP
一.启动另一个APP 目前公司项目需求,一个主APP,需要打开某些小APP,这些小APP是整合了Unity的,但是还是android程序(所有小APP的包名是已知的). 以前没做过,查询了一下实现方法 ...
- Android 一个app启动另一个app
最近,一个app启动另一个app,这个玩法挺火的嘛,有没有试过更新QQ到5.1版本,QQ的健康里面就可以添加其他app,实现从QQ跳转到其他app应用.这个挺好玩的,一下子带来了多少流量啊. 一.先来 ...
- Android在应用中依据包名启动另外一个APP
以下为TestIntentData工程 MainActivity如下: package cn.testintentdata; import java.util.List; import android ...
- Android: 启动另外的APP及传递参数(转)
转载自:http://blog.csdn.net/iefreer/article/details/8812585 有时候需要从一个APP中启动另外一个APP,比如Twitter/微信等. 如果你不知道 ...
- ios 一个app启动另一个app
问题描述:需要从一个ios应用程序中,能启动另一个ios应用程序. 开发环境:xcode7.3.1 关键词:白名单(LSApplicationQueriesSchemes).注册自己的URL Demo ...
- Android在一个APP中通过包名或类名启动另一个APP
开发有时需要在一个应用中启动另一个应用,比如Launcher加载所有的已安装的程序的列表,当点击图标时可以启动另一个应用.一般我们知道了另一个应用的包名和MainActivity的名字之后便可以直接通 ...
- Appium之启动第一个App
搭建appium自动化环境真是各种问题呀. 如何启动在真机上启动App? 执行操作:操作Android真机上打开手机淘宝app,并搜索“熊猫”. 脚本源码如下: from appium import ...
- 启动另一个app
(一) 通过包名.类名 开发有时需要在一个应用中启动另一个应用,比如Launcher加载所有的已安装的程序的列表,当点击图标时可以启动另一个应用.一般我们知道了另一个应用的包名和MainActivit ...
- 初学者用pycharm创建一个django项目和一个app时需要注意的事项
如何新建一个djiango项目: 1.在pycharm中点击File,选择new project,点击djiango,在右面的Location中将untitile改为你的项目名,其余部分注意见下图: ...
随机推荐
- 3-this关键字
1.表示类中的属性和调用方法 package com.example; /** * Created by Y on 16/4/13. */ public class People { private ...
- MATLAB的符号运算基础
在数学运算中,运算的结果如果是一个数值,可以称这类运算为数值运算:如果运算结果为表达式,在MATLAB中称为符号运算,符号计算是对未赋值的符号对象(可以是常数.变量.表达式)进行运算和处理.MATLA ...
- [读书笔记]xampp mysql启动失败解析(win7)
1. [mysql] MySQL Service detected with wrong path [mysql] Change XAMPP MySQL and Control Panel s ...
- angular2+webpack的搭建过程遇到的问题记录
最近在由于公司的项目要重构,Superiors要求将原先的Ionic1+angular1+gulp用全新的Ionic2+angular2+webpack重构.苦逼的Google了好久,环境搭建还是不太 ...
- 整理一些css在使用中的小技巧(进行中)
1. 消除li排列display:inline-block的间隙 ul{ font-size:; } ul li{ display:inline-block; }
- stm32
GPIO NVIC TIME USART ONE WIRE IIC SPI PWM ADC LCD XPT UCOSiii移植 定时器 蓝牙 陀螺仪
- 面试题-Java基础-垃圾回收
1.Java中垃圾回收有什么目的?什么时候进行垃圾回收? 垃圾回收的目的是识别并且丢弃应用不再使用的对象来释放和重用资源. 2.System.gc()和Runtime.gc()会做什么事情? 这两个方 ...
- Python基础(七)-文件操作
一.文件处理流程 1.打开文件,得到文件句柄赋值给一个变量 2.通过句柄对文件进行操作 3.关闭文件 二.基本操作 f = open('zhuoge.txt') #打开文件 first_line = ...
- bootstrap页面模板
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8&quo ...
- maven 项目 pom.xml文件中配置的jar包下载报错
[ERROR] [ERROR] Some problems were encountered while processing the POMs:[ERROR] 'dependencies.depen ...