1、从当前APP跳转到其它App的某个Activity
在App中跳转到其它APP中指定的Activity,需要满足以下条件:
1)目标APP的指定Activity允许其他应用访问
2)知晓目标APP包名以及目标Activity的完整路径
3)目标APP的目标Activity中定义了可以进行隐式启动的action 和 category ;
1)为必须满足的条件,在1)的基础上,2)与 3)满足其中一个,即可实现跳转;
2、具体代码如何实现
第一步:为目标APP的目标Activity添加权限属性(让其它应用拥有启动它的权限)
进入目标APP--->AndroidManifest--->找到目标Activity标签--->添加属性--->加入以下代码:
(此处假如目标Activity为 SplashActivity)
<activity android:name=".SplashActivity" android:exported="true">
<intent-filter>
<action android:name="android.intent.action.demo"/>
<category android:name="android.intent.category.DEFAULT"/> (不加此行会崩溃报错)
</intent-filter>
</activity>
注意:上述代码中的 category必须为DEFAULT,若改为其它的,会导致崩溃的情况;
第二步:愉快的进行跳转吧
在当前APP需要跳转的地方加入以下代码:
/**
* App内跳转其它应用某activity的第一种方式
*/
Intent intent = new Intent();
intent.setAction("android.intent.action.demo");
startActivity(intent);
或者
/**
* App内跳转其它应用某activity的第二种方式
*/
ComponentName componetName = new ComponentName(
"com.example.life", //这个是另外一个应用程序的包名
"com.example.life.SplashActivity"); //这个参数是要启动的Activity的全路径名
try {
Intent intent = new Intent();
intent.setComponent(componetName);
startActivity(intent);
} catch (Exception e) {
Toast.makeText(this, "跳转异常,请检查跳转配置、包名及Activity访问权限", Toast.LENGTH_SHORT).show();
}
3、方式选择建议
上述列出两种代码方式,有什么区别呢,还是有一点区别的,建议如下:
1、无论方式一 还是 方式二,都必须给目标activity注册标签中加入 android:exported="true"属性;
2、在不清楚目标包名 以及 目标Activity的完整路径时,建议使用 代码第一种方式,即 使用 action 启动,但是不要忘记在目标App的Activity注册时,添加对应的action和category (忘记加崩溃了就很尴尬);
3、如果知晓目标APP的包名以及目标Activity路径(这个一般都很好获取,使用aapt工具就可以获取apk的部分信息),这种情况就建议使用 第二种方式,这种方式就无需在目标Activity注册的标签中加入action 和 category标签了;
【本文仅为个人学习记录,如有错误,烦请指正,共同学习】