5

我正在制作一个能够上传单个或多个文件或文件夹的应用程序。意图过滤器的定义如下:

    <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 但这不会区分文件和共享的文本字符串,因为它们都是空的......)

4

2 回答 2

3

你有:

getIntent().getExtras().getString(Intent.EXTRA_STREAM) returns the filename

AFAIK,Android 从不向您发送打开的 fh 或套接字到文件。只是文件的普通旧路径,然后您可以处理:

File somefile = new File(filename);

然后读它或写它或什么不。

至于传入的文本是EXTRA_TEXT 或STREAM,只需测试两者并适当处理即可。希望这可以帮助。

于 2014-01-04T22:55:40.780 回答
0

file在清单中注册:

<activity android:name=".ReaderActivity">
    <intent-filter >
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.DEFAULT" />
        <data android:scheme="file"/>
        <data android:mimeType="text/plain"/>
    </intent-filter>
</activity>

然后getData()在我的活动中使用和内容解析器。

Uri uri = getIntent().getData();
InputStream inputStream = getContentResolver().openInputStream(uri);
...

请参阅此答案以了解它是什么...

于 2018-09-08T03:09:29.420 回答