【问题标题】:BroadcastReceiver for handling file by ACTION_SEND?通过 ACTION_SEND 处理文件的 BroadcastReceiver?
【发布时间】:2016-08-11 07:54:16
【问题描述】:

是否可以在 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))
}

}

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

【问题讨论】:

    标签: android android-intent android-activity broadcastreceiver


    【解决方案1】:

    您几乎做对了,但为了从其他应用接收文件,您需要创建 Activity不像您的代码中的 &lt;receiver&gt;)将处理这些文件。
    还可以像这样更改语法:

    <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

    【讨论】:

    • 是的,我刚刚通过运行 IntentService 进行文件解析和复制并仅发送真实文件路径的活动来实现目标活动。 p.s.:send 和 send_multiple 类别可以留在一个意图过滤器标签中)
    【解决方案2】:

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

        <intent-filter>
            <action android:name="android.intent.action.SEND" />
            <category android:name="android.intent.category.DEFAULT" />
            <data android:mimeType="image/*" />
        </intent-filter>
    
    
     Intent intent1 = getIntent();
            String action = intent1.getAction();
            String type = intent1.getType();
    
            if (Intent.ACTION_SEND.equals(action) && type != null) {
                this.handleSend(intent1);
            }
    
        void handleSend(Intent intent) {
            try {
                Uri imageUri = (Uri) intent.getParcelableExtra(Intent.EXTRA_STREAM);
                imageShare.setImageURI(imageUri);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    

    【讨论】:

      猜你喜欢
      • 2023-03-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多