Я создаю приложение, которое может загружать один или несколько файлов или папок. Фильтр намерений определяется следующим образом:
<activity android:name=".UploadActivity" android:launchMode="singleTop" android:theme="@style/Theme.Sherlock">
<intent-filter android:label="@string/upload_intent">
<action android:name="android.intent.action.SEND" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:mimeType="application/*" />
<data android:mimeType="audio/*" />
<data android:mimeType="image/*" />
<data android:mimeType="media/*" />
<data android:mimeType="multipart/*" />
<data android:mimeType="text/*" />
<data android:mimeType="video/*" />
</intent-filter>
<intent-filter android:label="@string/upload_intent">
<action android:name="android.intent.action.SEND_MULTIPLE" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:mimeType="*/*" />
</intent-filter>
</activity>
Это прекрасно работает с Blackmoon File Explorer и галереей Android 4.0.3. Мое приложение отображается в меню «Поделиться». Тем не менее, он также отображается в браузере, когда вы долго нажимаете на URL и выбираете «Поделиться страницей».
Когда я отправляю текстовый файл в свое приложение, я получаю следующее:
getIntent().getAction() returns Intent.ACTION_SEND
getIntent().getType() returns "text/plain"
getIntent().getScheme() returns null
getIntent().getExtras().getString(Intent.EXTRA_STREAM) returns the filename
Однако отправка URL-адреса из браузера возвращает то же самое минус Intent.EXTRA_STREAM. Я легко могу обнаружить это в коде и сказать «эй, я не могу загрузить текст!» но я бы предпочел изменить фильтр намерений, чтобы он срабатывал только при наличии EXTRA_STREAM. Возможно ли это сделать?
(Я пытался использовать схему android:, но она не будет различать файл и текстовую строку для совместного использования, поскольку они оба нулевые ...)