I have two similar applications (one free, one paid).
An activity is defined with exported="false"
<activity
android:name=".MyActivity"
android:exported="false"
android:noHistory="true" >
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="vnd.android.cursor.item/vnd.mine" />
</intent-filter>
</activity>
When I call startActivity
with the appropriate implicit intent from the free app, the activity picker appears.
I don't understand why the activity from the paid app appears, since it is exported="false"
I suppose I can add an intent filter based on the URL, but my question is: why does the activity from the other app appear when the doc reads
Whether or not the activity can be launched by components of other applications
Because you have a matching
<intent-filter>
. Since you do not need the<intent-filter>
for a non-exported activity, simply delete it and use an explicitIntent
when starting this activity.I had the same question and was told that this was expected behavior and the bug is in our app for having a useless
<intent-filter>
. Quoting Dianne Hackborn: