Пользовательские действия с использованием неявных намерений между приложениями

Я пытаюсь получить два действия в двух отдельных приложениях для связи с использованием пользовательского действия и неявного намерения.

Первое приложение (сервер) имеет следующий манифест:

<application android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme"> <activity android:name="edu.example.sharing.manager.SecureFileShare" android:label="@string/title_activity_secure_file_share" android:exported="true"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> <intent-filter> <action android:name="edu.example.sharing.action.STORE" /> <category android:name="android.intent.category.DEFAULT" /> <data android:mimeType="*/*" /> </intent-filter> </activity> </application> 

Второе приложение создает намерение следующим образом:

 File f = new File(s); Uri fileUri = Uri.fromFile(f); Intent intent = new Intent(); intent.setData(fileUri); intent.setAction("edu.example.sharing.action.STORE"); startActivityForResult(intent, STORE_REQUEST); 

Его манифест нормальный. Однако, когда я пытаюсь отправить намерение в клиентское приложение, я получаю исключение, которое не было обнаружено:

 FATAL EXCEPTION: main android.content.ActivityNotFoundException: No Activity found to handle Intent {act=edu.example.sharing.action.STORE dat=file:///storage/sdcard0/Download/Alarcon12-Rigoberto.pdf } at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1545) at android.app.Instrumentation.execStartActivity(Instrumentation.java:1416) at android.app.Activity.startActivityForResult(Activity.java:3351) at android.app.Activity.startActivityForResult(Activity.java:3312) 

Что заставляет Android не распознавать объявленную активность во втором приложении? Благодарю.

Solutions Collecting From Web of "Пользовательские действия с использованием неявных намерений между приложениями"

После долгих поисков, вот что я нашел:

Когда вы используете встроенный тип действия и присоединяете поле данных или когда используете пользовательский тип действия без поля данных, intent-filter без элемента data одобрен.

Однако, когда вы определяете настраиваемое действие и включаете поле данных, вы должны вручную установить mime-type для присоединенного URI. Документация на Android утверждает, что

Обычно тип выводится из самих данных. Установив этот атрибут, вы отключите эту оценку и принудительно введите явный тип.

Но это не так. Когда я помещал в file:// URI, который закончился в .txt , Android назначил ему нулевой mime-type , поэтому он не будет соответствовать никакому intent-filter , даже одному с mime-type data и */* mime-type . Мне нужно было вручную установить тип намерения, используя setDataAndType() .

Короче : вы должны вручную определить mime-type намерения при использовании пользовательского действия с данными.

Во-первых, вы можете указать только, к какому приложению обращаться; Вы не можете указать, к какой склонности идти; Я уже ответил, как перейти к другому приложению здесь ; После этого ваш контроль переходит в другое приложение; Вы должны справиться с этим там