BroadcastReceiver用于通过ACTION_SEND处理文件?

时间:2016-08-11 07:54:16

标签: android android-intent android-activity broadcastreceiver

在Android中是否可以创建BroadcastReceiver来处理从其他应用程序共享的文件?

在清单中我写道:

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

<receiver android:name=".modules.file.FileReceiver" >

        <intent-filter>
            <category android:name="android.intent.category.DEFAULT" />

            <action android:name="android.intent.action.SEND" />
            <action android:name="android.intent.action.SEND_MULTIPLE" />

            <data android:mimeType="application/pdf" />
        </intent-filter>
    </receiver>

和我的FileReceiver文件(kotlin):

class FileReceiver : WakefulBroadcastReceiver() {

override fun onReceive(context: Context?, intent: Intent?) {
    context?.startService(Intent(context, FileHandlingIntentService::class.java))
}

}

但是我无法将文件从文件管理器发送到我的应用程序,因为我的应用程序不在可处理文件的应用程序列表中... 真的只能在Activity中处理文件吗? 有什么建议吗?

2 个答案:

答案 0 :(得分:0)

你几乎做对了,但为了接收来自其他应用的文件,您需要在代码中创建 Activity Not <receiver> )将处理这些文件。
还改变语法如下:

<activity android:name=".MyActivity" >
    <intent-filter>
        <action android:name="android.intent.action.SEND" />
        <category android:name="android.intent.category.DEFAULT" />
        <data android:mimeType="pdf/*" />
    </intent-filter>
    <intent-filter>
        <action android:name="android.intent.action.SEND_MULTIPLE" />
        <category android:name="android.intent.category.DEFAULT" />
        <data android:mimeType="pdf/*" />
    </intent-filter>
</activity>

您可以阅读更多here

答案 1 :(得分:0)

这有助于在您的应用中获取数据,在我的代码中,我将从其他应用中获取图片

actual={"Appl", "Orange", "Ornge", "Peace"}
predicted=["Red", "Apple", "Green", "Peace", "Orange"]

result = {}

for pre in predicted:
    if pre in actual:
        result.add(pre)
    else:
        for act in actual:
            if (similar(pre, act) > 0.8):
                result.add(pre)