8

我試圖在我的Service之一中過濾和處理android.intent.action.SEND操作的意圖。我寫在我的AndroidManifest.xml如下:指定某個服務的SEND(共享)意圖過濾器

<service 
    android:name=".app.ScreamerService" 
    android:label="@string/app_name" > 
    <intent-filter> 
     <action android:name="android.intent.action.SEND"/> 
     <category android:name="android.intent.category.DEFAULT"/> 
     <data android:mimeType="*/*"/> 
    </intent-filter>                  
</service> 

現在的問題是,我沒有看到我在列表中的應用「通過共享」選項時,例如,試圖分享來自網頁瀏覽器或聯繫人列表中的聯繫人。但是,如果我將意圖過濾器移動到<activity>主標記(而不是<service>),則我的應用程序名稱和圖標確定將顯示在「share via」選項的列表中。

我在這裏做錯了什麼?無法將SEND操作定向到服務?

回答

9

我想在我的一個服務中用android.intent.action.SEND操作來過濾和處理意圖。

ACTION_SEND是一個活動動作,因此不能被服務或廣播接收器接收。現在

,問題是,我沒有看到我在列表中的應用「通過共享」選項時,例如,

那是因爲它不是一個活動。

無法將SEND操作定向到服務?

出現在選擇器中的事物(例如,對於ACTION_SEND)必須是活動。不過,歡迎您的活動與服務進行交流。

1

這應該工作,但是:

與廣播接收器首先嚐試獲取的意圖,並啓動您的服務。

如果不起作用:

使用沒有佈局的假活動。 (讓主題半透明,並在處理意圖後立即完成)。

此外,您的mime類型意味着您正在處理每一種文件類型。你需要什麼?我認爲你應該在選擇時更加精確。如果有人試圖用你不支持的類型來使用它,你會得到負面反饋。我的建議是測試類型並逐個添加它們,因爲您可以自信地處理它們。