Как экспортировать активность, чтобы другие приложения могли ее назвать?

Ну, я много искал, но не нашел точного ответа, как экспортировать Activity, поэтому приложение может запустить его с помощью startActivityforResult.

Как мне это достичь? Должен ли я каким-то образом изменить манифест?

Ответ 1

Вам нужно объявить фильтр намерений в вашем манифесте (я взял следующий пример из сканера штрих-кода):

<activity android:name="...">
    <intent-filter>
        <action android:name="com.google.zxing.client.android.SCAN" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
</activity>

Затем создайте намерение с той же строкой действия:

Intent intent = new Intent("com.google.zxing.client.android.SCAN");
startActivityForResult(intent, code);

Android должен начать вашу деятельность (или он отобразит раскрывающийся список, если несколько приложений используют одну и ту же строку действий).

Ответ 2

Как альтернатива ответу Далмас, вы можете фактически экспортировать Activity без создания <intent-filter> (наряду с хлопотами при создании пользовательского действия).

В Manifest отредактируйте тэг Activity так:

<activity
    android:name=".SomeActivity"
    ....
    android:exported="true" />

Важная часть android:exported="true", этот тег export определяет, может ли активность запускаться компонентами других приложений ". Если ваш <activity> содержит <intent-filter>, то этот тег автоматически устанавливается на true, если он не установлен, по умолчанию он установлен на false.

Затем для запуска Activity выполните следующее:

Intent i = new Intent();
i.setComponent(new ComponentName("package name", "fully-qualified name of activity"));
startActivity(i);

Конечно, с помощью этого метода вам нужно будет узнать точное название запускаемой вами задачи.