美文网首页
启动另一个App的Activity

启动另一个App的Activity

作者: wislie_zhu | 来源:发表于2020-03-23 22:04 被阅读0次

    假设当前的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中

    相关文章

      网友评论

          本文标题:启动另一个App的Activity

          本文链接:https://www.haomeiwen.com/subject/rkigyhtx.html