Android 唤醒应用程序,一个APP唤醒另一个APP,A应用调用B应用Activity,两个APP间传递数据

注:将A作为当前应用,B作为要被唤醒的应用

B应用需要在manifest文件对应Activity添加 android:exported="true"

方式一:getLaunchIntentForPackage唤醒

这种方式会启动要唤醒的app程序,相当于启动了B应用,进入其启动页。

"com.test.wakedemo2"为应用的包名。

//A应用中唤醒部分代码逻辑
Intent intent = getPackageManager().getLaunchIntentForPackage("com.test.wakedemo2");
if (intent != null) {
    //inten可用来在两个APP间传递数据
    intent.putExtra("type", "110");
    //setFlags看自己情况使用,也可以不调用
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    startActivity(intent);
}

 方式二:包名+特定Activity名唤醒

这种方式并不会启动B应用的应用程序,而是还在A应用中打开了B应用中的一个Activity。

//A应用唤醒部分代码逻辑
Intent intent = new Intent(Intent.ACTION_MAIN);
/**知道要跳转应用的包命与目标Activity*/
ComponentName componentName = new ComponentName("com.test.wakedemo2", "com.test.wakedemo2.WakeActivity");
intent.setComponent(componentName);
intent.putExtra("", "");//这里Intent传值
startActivity(intent);

 方式三:intent-filter的action,特定Activity名唤醒

 这种方式同样不会启动B应用程序,只打开他的Activity

//A应用唤醒部分代码逻辑
Intent intent1 = new Intent("android.intent.action.Wake");
startActivity(intent1);

B应用里需要在Manifest给该Activity配置intent-filter

<activity android:name=".WakeActivity"
    android:exported="true">
    <intent-filter>
        <action android:name="android.intent.action.Wake" />
        <category android:name="android.intent.category.DEFAULT"/>
    </intent-filter>
</activity>

方式四:URI唤醒

//A应用唤醒部分代码逻辑
Intent intent2 = new Intent("android.intent.action.Wake", Uri.parse("wake://com.test.demo.demo/WakeActivity?userId=102"));
startActivity(intent2);

第一个参数是B应用中的action,第二个参数是Uri,需要将B应用中"scheme:// + host + path"拼接,最后想要传递数据的话可以再拼接数据,如上例中的?userId=102,也可以不使用或者使用Intent传递。

B应用需要在Manifest做如下配置

<intent-filter>
    <!-- 指定启动协议 -->
    <data android:host="com.test.demo.demo"
        android:scheme="wake"
        android:path="/WakeActivity"/>

    <action android:name="android.intent.action.Wake" />
    <category android:name="android.intent.category.DEFAULT"/>

</intent-filter>

猜你喜欢

转载自blog.csdn.net/qq_37980878/article/details/120952599