我正在制作一个能够上传单个或多个文件或文件夹的应用程序。意图过滤器的定义如下:
<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 文件资源管理器和 Android 4.0.3 Gallery。我的应用程序显示在共享菜单中。但是,当您长按 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:scheme 但这不会区分文件和共享的文本字符串,因为它们都是空的......)