2012-04-27 34 views
0

我正在創建一個可以由服務控制的簡單應用程序。爲了控制這種應用,服務必須知道可以發送給它的命令,所以我認爲這應該是給這些命令的列表中的應用,具體如下:如何發送支持意圖列表?

  1. 應用程序可能有輔助活動迴應MY_ACTION_GET_COMMANDS意圖(所以我應該在「AndroidManifest.xml」文件中定義意圖過濾器)。
  2. 該服務知道他可以使用startActivityForResult方法發送這種類型的意圖。
  3. 當應用程序收到此類意圖時,相應的活動通過發送支持的命令列表(即意向列表)來響應發件人。

如何發送支持的意圖列表?

UPDATE:請注意,應用程序和服務位於不同的包中。

回答

2

我不知道我明白爲什麼你需要展示這些意圖的活動。這是真正的用戶會看到的東西嗎?

如果您確實想要獲取特定應用程序正在偵聽的所有意向列表,則可以使用PackageManager。使用PackageManager檢索PackageInfo。然後,您將能夠掃描該應用程序中所有定義的接收器。

如果您進一步解釋,我可能會提供更多幫助。

+0

_我不知道我明白你爲什麼需要展示這些意圖的活動。這是真實用戶會看到的東西嗎?_服務的用戶應該能夠將一個命令(一個簡單的字符串,例如「寫入」,「保存到文件」)關聯到每個支持的意圖應用。應用程序與服務分離(它們是不同軟件包的一部分)。該服務包括一個語音識別器,然後用戶可以發出命令來控制應用程序。 – enzom83 2012-04-27 10:44:04

+1

那麼,它要麼使用PackageManager獲取它們(甚至可以從服務應用程序中完成),要麼只是從遠程應用程序返回一個漂亮的列表(帶有人類可讀的描述)。您可以使用活動或使用內容提供程序查詢原始數據(這是相當重量級的IMO,但如果您還想寫狀態更改,可能會有用)... – EvilDuck 2012-04-27 10:49:43

+0

'PackageInfo pi = pm.getPackageInfo(「org.example 「,PackageManager.GET_RECEIVERS); (ActivityInfo ai:pi.receivers){ // Where intent filters? }' – enzom83 2012-04-27 11:28:01

1

您可以將支持的意圖作爲列表從子活動傳回給父級。

Intent intent = this.getIntent(); 
     ArrayList<String> a = new ArrayList<String>(); 
     a.add("com.customintent.INTENT_ONE"); 
     a.add("com.customintent.INTENT_TWO"); 
     intent.putStringArrayListExtra("list",a); 

     this.setResult(RESULT_OK, intent);