Well I searched a lot, but I didn't find a precise answer how to export an Activity, so an app can start it with startActivityforResult
.
How do I achieve that? Do I have to change the Manifest in some ways?
Well I searched a lot, but I didn't find a precise answer how to export an Activity, so an app can start it with startActivityforResult
.
How do I achieve that? Do I have to change the Manifest in some ways?
As an alternate to Dalmas' answer, you can actually export an Activity
without creating an <intent-filter>
(along with the hassle of coming up with a custom action).
In the Manifest
edit your Activity
tag like so:
<activity
android:name=".SomeActivity"
....
android:exported="true" />
The important part is android:exported="true"
, this export
tag determines "whether or not the activity can be launched by components of other applications". If your <activity>
contains an <intent-filter>
then this tag is set to true
automatically, if it does not then it is set to false
by default.
Then to launch the Activity
do this:
Intent i = new Intent();
i.setComponent(new ComponentName("package name", "fully-qualified name of activity"));
startActivity(i);
Of course with this method you will need to know the exact name of the Activity you are trying to launch.
You need to declare an intent-filter in your Manifest (I took the following example from Barcode Scanner) :
<activity android:name="...">
<intent-filter>
<action android:name="com.google.zxing.client.android.SCAN" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
Then create an intent with the same action string :
Intent intent = new Intent("com.google.zxing.client.android.SCAN");
startActivityForResult(intent, code);
Android should start your activity (or it will show a drop-down box if there are multiple apps sharing the same action string).