假设当前的Activity为ActivityA,要跳转到另一个App的Activity,这个Activity为TargetActivity
一.通过包名+类名启动
ActivityA
Intent intent = new Intent();
intent.setClassName("com.wislie.charging","com.wislie.charging.TargetActivity");
startActivity(intent);
TargetActivity
<activity android:name=".TargetActivity" android:exported="true" />
android:exported="true" 表示Activity能否被另外一个Application的组件启动, true允许启动, false不允许
二.通过action启动
ActivityA
startActivity(new Intent("com.wislie.intent.target"));
TargetActivity
<activity android:name=".TargetActivity" >
<intent-filter >
<action android:name="com.wislie.intent.target"/>
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
三.通过data启动
ActivityA
Uri uri = Uri.parse("app://com.wislie.app");
Intent intent = new Intent();
intent.setData(uri);
startActivity(intent);
TargetActivity
<activity android:name=".TargetActivity">
<intent-filter>
<action android:name="com.wislie.intent.target" />
<category android:name="android.intent.category.DEFAULT" />
<data
android:host="com.wislie.app"
android:scheme="app" />
</intent-filter>
</activity>
四.启动有权限的Activity
倘若设置android:exported="true", 要启动的Activity就会暴露出来;为了尽量不暴露Activity,可以为Activity添加权限控制
ActivityA
Intent intent = new Intent();
intent.setClassName("com.wislie.charging", "com.wislie.charging.TargetActivity");
startActivity(intent);
<uses-permission android:name="com.wislie.charging.permission.TargetActivity" />
TargetActivity
<permission android:name="com.wislie.charging.permission.TargetActivity" />
<activity
android:name=".TargetActivity"
android:permission="com.wislie.charging.permission.TargetActivity">
<intent-filter>
<action android:name="com.wislie.intent.target" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
注意事项: 在ActivityA启动TargetActivity时, 如果找不到TargetActivity,就会抛异常,因此需要将启动代码放在try-catch中
网友评论