Android中从一个应用中启动另外的应用的实现方式

核心代码如下

1. 第一种,知道应用程序的包名和启动的Activity的类名
        Intent intent = new Intent();        
ComponentName cn = new ComponentName("com.example.test03", "com.example.test03.IntentActivity");           
intent.setComponent(cn);
intent.setAction(Intent.ACTION_VIEW);
startActivity(intent);
2. 第二种 只知道应用的包名
Intent launchIntentForPackage = this.getPackageManager().getLaunchIntentForPackage("com.example.test03");
this.startActivity(launchIntentForPackage);
3. 第三种 知道应用的包名和启动的Activity的类名,但是这个Activity类不是应用程序的入口的Activity
        Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_LAUNCHER);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
ComponentName cn = new ComponentName("com.example.test03",
                "com.example.test03.IntentActivity");
intent.setComponent(cn);
intent.setAction(Intent.ACTION_VIEW);
startActivity(intent);

==特别注意==

++如果要启动的类或者Activity不是应用的入口Activity,使用第一种方法,就会出现如下错误++

E/AndroidRuntime(3594): Caused by: java.lang.SecurityException: Permission Denial: starting Intent { act=android.intent.action.VIEW cmp=com.example.test03/.IntentActivity } from ProcessRecord

我们可以看到这个错误不是平时简单的看到的那种缺少系统权限的操作,而是权限拒绝的意思。

所以如何解决?

有如下两种解决方法:

1.代码设置
        Intent intent = new Intent(Intent.ACTION_MAIN);
        intent.addCategory(Intent.CATEGORY_LAUNCHER);
2.清单文件中进行配置,加一个exported的属性
        <activity 
            android:name="com.example.test03.IntentActivity"
            android:exported="true"></activity>

为什么我们的入口Activity不需要设置这个属性,因为在我们设置了入口activity设置了Action和category这两个属性,相当于是设置exported的属性为true。所以在入口的Activity中不需要进行设置这个属性

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值