您的位置:首页 > 移动开发

Android通过包名或类名启动APP或者一个Activity 以及 判断APP的运行状态

2016-11-03 17:29 681 查看
惯例:先上图后说话,谢谢各位伙伴的支持! 有你们是我的福分!

运行成功效果:         
欢迎一起讨论和学习,QQ:732258496  微信:15520726587

        




            

 每日一言:美好的生命应该充满期待、惊喜和感激!

一、通过包名打开APP

(1)、第一步:

doStartApplicationWithPackageName("com.grasp.nsuperseller");

(2)、第二步:

/*打开app*/
@TargetApi(Build.VERSION_CODES.DONUT)
private void doStartApplicationWithPackageName(String packagename) {

// 通过包名获取此APP详细信息,包括Activities、services、versioncode、name等等
PackageInfo packageinfo = null;
try {
packageinfo = getPackageManager().getPackageInfo(packagename, 0);
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
if (packageinfo == null) {
return;
}

// 创建一个类别为CATEGORY_LAUNCHER的该包名的Intent
Intent resolveIntent = new Intent(Intent.ACTION_MAIN, null);
resolveIntent.addCategory(Intent.CATEGORY_LAUNCHER);
resolveIntent.setPackage(packageinfo.packageName);

// 通过getPackageManager()的queryIntentActivities方法遍历
List<ResolveInfo> resolveinfoList = getPackageManager()
.queryIntentActivities(resolveIntent, 0);

ResolveInfo resolveinfo = resolveinfoList.iterator().next();
if (resolveinfo != null) {
// packagename = 参数packname
String packageName = resolveinfo.activityInfo.packageName;
// 这个就是我们要找的该APP的LAUNCHER的Activity[组织形式:packagename.mainActivityname]
String className = resolveinfo.activityInfo.name;
// LAUNCHER Intent
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_LAUNCHER);

// 设置ComponentName参数1:packagename参数2:MainActivity路径
ComponentName cn = new ComponentName(packageName, className);

intent.setComponent(cn);
startActivity(intent);
}
}

二、打开APP中的某个Activity界面

例如:打开    NSignInHallActivity

Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_LAUNCHER);
ComponentName cn = new ComponentName("com.grasp.nsuperseller", "com.grasp.nsuperseller.activity.signin.NSignInHallActivity");
intent.setComponent(cn);
startActivity(intent);

二、判断APP的运行状态

(1)、第一步:

getAppSatus(ClockAlarmActivity.this, "com.grasp.nsuperseller

(2)、第二步:

/**
* 返回app运行状态
* 1:程序在前台运行
* 2:程序在后台运行
* 3:程序未启动
* 注意:需要配置权限<uses-permission android:name="android.permission.GET_TASKS" />
*/
public int getAppSatus(Context context, String pageName) {

ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
List<ActivityManager.RunningTaskInfo> list = am.getRunningTasks(20);

//判断程序是否在栈顶
if (list.get(0).topActivity.getPackageName().equals(pageName)) {
return 1;
} else {
//判断程序是否在栈里
for (ActivityManager.RunningTaskInfo info : list) {
if (info.topActivity.getPackageName().equals(pageName)) {
return 2;
}
}
return 3;//栈里找不到,返回3
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息