代码之家  ›  专栏  ›  技术社区  ›  Cheok Yan Cheng

从共享意图筛选器启动的活动不遵守android:taskAffinity规则在冬季

  •  0
  • Cheok Yan Cheng  · 技术社区  · 5 年前

    为了避免共享操作受到当前运行的主应用程序的干扰,我提到 android:taskAffinity

    我也尽最大努力确保只有一个 com.xxx.MyActivity 在任务中 com.xxx.share 通过使用

    1. android:launchMode="singleTask"
    2. android:clearTaskOnLaunch="true"

    AndroidManifest.xml文件

    <activity android:name="com.xxx.MyActivity"
        android:taskAffinity="com.xxx.share"
        android:launchMode="singleTask"
        android:clearTaskOnLaunch="true"
        android:theme="@style/Theme.Transparent"
        android:windowSoftInputMode="stateAlwaysHidden" >
        <intent-filter>
            <action android:name="android.intent.action.SEND" />
            <category android:name="android.intent.category.DEFAULT" />
            <data android:mimeType="text/plain" />
        </intent-filter>
    
        <intent-filter>
            <action android:name="android.intent.action.SEND" />
            <category android:name="android.intent.category.DEFAULT" />
            <data android:mimeType="image/*" />
        </intent-filter>
    
        <intent-filter>
            <action android:name="android.intent.action.SEND_MULTIPLE" />
            <category android:name="android.intent.category.DEFAULT" />
            <data android:mimeType="image/*" />
        </intent-filter>
    </activity>
    

    第一次创建MyActivity时( onCreate 被调用),我可以验证它是否在名为“的任务中”com.xxx.share公司".

    但是,如果MyActivity被“重用”( onNewIntent 是的 “任务名称内的长度”com.xxx.share公司".

    我使用以下方法来获取当前任务名称- Is it possible to get the name taskAffinity which the Activity belongs to during runtime?

    • 以指定的任务名称启动
    • 是任务中唯一的一项活动

    p/s公司 如果 Activity

    <activity android:name="com.xxx.widget.MyActivity"
        android:taskAffinity="com.xxx.launcher"
        
    public static int getClearEverythingFlagsForLauncher() {
        return Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_CLEAR_TASK;
    }
        
    final android.content.Intent openIntent = new Intent(context, MyActivity.class);
    openIntent.addFlags(getClearEverythingFlagsForLauncher());
    

    但是现在,通过共享意图来启动活动已经超出了我的控制范围。我不能再供应了 getClearEverythingFlagsForLauncher() .

    0 回复  |  直到 5 年前