1

Android中是否可以創建BroadcastReceiver來處理從其他應用程序共享的文件?BroadcastReceiver通過ACTION_SEND處理文件?

清單中我寫道:

<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文件(科特林):

class FileReceiver : WakefulBroadcastReceiver() { 

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

}

,但我不能從文件管理器將文件發送到我的應用程序,因爲我的應用程序不在可以處理文件的應用程序列表中... 是否僅在活動中才能處理文件? 有什麼建議嗎?

回答

0

你幾乎得到它的權利,但爲了從其他應用程序接收文件,你需要(在你的代碼<receiver>等)將處理這個文件來創建Activity
也改變語法如下:

<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

+0

是的,我剛剛通過運行IntentService進行文件解析和複製並僅發送實際文件路徑以實現目標活動。 p.s .: send和send_multiple類別可以保留在一個intent-filter標籤中) –

0

這將有助於您的應用程序獲得的數據,在我的代碼,我會從其他應用

接收圖像
<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(); 
     } 
    }