0

I am developing an app which receives share intents from other apps.

I specified android:launchMode="singleTask" in the AndroidManifest.xml which works fine when it receives share intents from most apps.

However, "Microsoft 365" (previously known as "Microsoft Lens") opens the app inside its app. So the user sees 2 same apps but one app is actually inside another app.

How can I prevent this?

https://github.com/localsend/localsend/issues/176

Current XML:

<application
        android:label="LocalSend"
        android:name="${applicationName}"
        android:usesCleartextTraffic="true"
        android:banner="@drawable/banner"
        android:icon="@mipmap/ic_launcher"
        android:requestLegacyExternalStorage="true"> <!-- localsend: image_gallery_saver requires requestLegacyExternalStorage -->

        <!-- localsend: prevent multiple instances by android:launchMode="singleTask" -->
        <activity
            android:name=".MainActivity"
            android:exported="true"
            android:launchMode="singleTask"
            android:theme="@style/LaunchTheme"
            android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
            android:hardwareAccelerated="true"
            android:windowSoftInputMode="adjustResize">
            <!-- Specifies an Android theme to apply to this Activity as soon as
                 the Android process has started. This theme is visible to the user
                 while the Flutter UI initializes. After that, this theme continues
                 to determine the Window background behind the Flutter UI. -->
            <meta-data
              android:name="io.flutter.embedding.android.NormalTheme"
              android:resource="@style/NormalTheme"
              />
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>
                <category android:name="android.intent.category.LAUNCHER"/>

                <!-- enable Android TV -->
                <category android:name="android.intent.category.LEANBACK_LAUNCHER"/>
            </intent-filter>

            <!-- localsend: Receive share intent (share_handler) -->
            <intent-filter>
                <action android:name="android.intent.action.SEND" />
                <category android:name="android.intent.category.DEFAULT" />
                <data android:mimeType="*/*" />
            </intent-filter>
            <intent-filter>
                <action android:name="android.intent.action.SEND_MULTIPLE" />
                <category android:name="android.intent.category.DEFAULT" />
                <data android:mimeType="*/*" />
            </intent-filter>

        </activity>
        <!-- Don't delete the meta-data below.
             This is used by the Flutter tool to generate GeneratedPluginRegistrant.java -->
        <meta-data
            android:name="flutterEmbedding"
            android:value="2" />
    </application>
Tien Do Nam
  • 3,630
  • 3
  • 15
  • 30
  • My guess is that by "app" you mean "task". For that, look at [`android:allowTaskReparenting`](https://developer.android.com/guide/topics/manifest/application-element#reparent) and possibly [`android:taskAffinity`](https://developer.android.com/guide/topics/manifest/application-element#aff). See also [this](https://stackoverflow.com/q/25518197/115145) and [this](https://developer.android.com/guide/components/activities/tasks-and-back-stack#Affinities). – CommonsWare Feb 18 '23 at 00:45

1 Answers1

0

If you specified android:launchMode="singleTask" within your app and you still experience this behaviour, it implies that the app which is launching your app(activity) is most likely doing so using startActivityForResult(). With this, android:launchMode="singleTask" is ignored and your app is launched within the task of the caller app(In this case Microsoft 365). To prevent this, the caller app has to launch your app using startActivity().

Follow this link for more clarification: Android "singleTask" activity creates new instance of the Activity