启动另一个应用

来源:互联网 发布:win 写的java导入到mac 编辑:程序博客网 时间:2024/06/07 12:57

方式一

A应用启动B,在B应用中注册一个BroadcastReceiver,然后在BroadcastReceiver中启动想要界面

    @Override    public void onReceive(Context context, Intent intent) {        Toast.makeText(context, "收到广播了", Toast.LENGTH_SHORT).show();        Intent intent1 = new Intent(context, MainActivity.class);        intent1.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);        context.startActivity(intent1);    }
然后在A中发送广播

Intent intent = new Intent();        intent.setAction("...");        sendBroadcast(intent);
看起来没有什么问题,但是如果B应用没有启动或者被杀死了,那么这种方法无效。

方式二

通过包名和类型启动

        Intent intent = new Intent(Intent.ACTION_MAIN);        intent.addCategory(Intent.CATEGORY_LAUNCHER);        ComponentName cn = new ComponentName("com.***.***", "com.***.***.MainActivity");        intent.setComponent(cn);        startActivity(intent);
注意,类名一定要是全类名。

如果只知道包名不知道类名,可用如下方法

    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);        }    }




原创粉丝点击