1、启动另外一个程序,必须要先知道这个程序的包名
可以先查找手机中有没有安装此包名的程序
(1)先获取手机中的所有包名,然后查找
private boolean isAvilible(Context context, String packageName) {
PackageManager packageManager = context.getPackageManager();//
// 获取packagemanager
List<PackageInfo> pinfo = packageManager.getInstalledPackages(0);//
// 获取所有已安装程序的包信息
List<String> pName = new ArrayList<String>();// 用于存储所有已安装程序的包名
// 从pinfo中将包名字逐一取出,压入pName list中
if (pinfo != null) {
for (int i = 0; i < pinfo.size(); i++) {
String pn = pinfo.get(i).packageName;
pName.add(pn);
}
}
return pName.contains(packageName);// 判断pName中是否有目标程序的包名,有TRUE,没有FALSE
}
(2)直接通过包名去查找,找不到会抛出异常
private boolean checkAPP(Context context, String packageName) {
if (packageName == null || "".equals(packageName))
return false;
try {
ApplicationInfo info = context.getPackageManager()
.getApplicationInfo(packageName,
PackageManager.GET_UNINSTALLED_PACKAGES);
return true;
} catch (NameNotFoundException e) {
return false;
}
}
private void openApp(String packageName) {
PackageManager pm = getPackageManager();
PackageInfo pi = null;
try {
pi = pm.getPackageInfo(packageName, 0);
} catch (NameNotFoundException e) {
e.printStackTrace();
}
Intent resolveIntent = new Intent(Intent.ACTION_MAIN, null);
resolveIntent.addCategory(Intent.CATEGORY_LAUNCHER);
resolveIntent.setPackage(pi.packageName);
List<ResolveInfo> apps = pm.queryIntentActivities(resolveIntent, 0);
ResolveInfo ri = apps.iterator().next();
if (ri != null) {
// String packageName = ri.activityInfo.packageName;
String className = ri.activityInfo.name;//获取到启动Activity的类名
Intent intent = new Intent(Intent.ACTION_MAIN);//下面是通过包名和启动Activity的类名,启动程序
intent.addCategory(Intent.CATEGORY_LAUNCHER);
ComponentName cn = new ComponentName(packageName, className);
intent.setComponent(cn);
startActivity(intent);
}
}