Как экспортировать активность, чтобы другие приложения могли ее назвать?
Ну, я много искал, но не нашел точного ответа, как экспортировать 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);
Конечно, с помощью этого метода вам нужно будет узнать точное название запускаемой вами задачи.