2014-04-27 43 views
2

按照Android開發者文檔:添加安全持久廣播

http://developer.android.com/reference/android/content/Context.html#sendStickyBroadcast(android.content.Intent)

沒有規定提供,以確保粘性廣播用戶定義的權限。

我已經使用sendStickyBroadcastAsUser這需要一個應用程序具有兩件事情(按照上面的鏈接)嘗試: 1.讓許可「INTERACT_ACROSS_USERS」和 2.應用程序必須是系統應用程序。

不過我曾嘗試與準則實施,但仍然可以接收廣播粘未經上述兩個提到以前的情況(即與沒有所需的權限普通的應用程序),它依然保持着我的廣播不安全。

以下是我的代碼片段:

// send sticky broadcast. 
    Intent intent = new Intent("my_action"); 
    intent.putExtra("my_extra", state); 
    if (DebugMode.DEBUG) { 
     Log.d(TAG, "Sending Broadcast " + intent.toUri(0)); 
    } 

    Parcel in = Parcel.obtain(); 
    context.sendStickyBroadcastAsUser(intent, new UserHandle(in)); 
    in.recycle(); 

,因爲它需要留在系統的其他應用程序,以從中讀取我的應用程序的狀態,我不能用正常播放。

有沒有一種辦法,以確保我粘廣播?

回答

2

有用於發送持久廣播消息,並要求接收器保持特定的權限沒有公開的API。 API假設如果你發送一些粘性的東西,你希望它留在周圍,並且可以用於以後的任何事情。該方法不對廣播的接收器施加任何限制。所需的「系統應用程序」和許可僅適用於粘性廣播的發送者。該方法用於將廣播發送到由其他物理用戶(即,多用戶設備)運行的應用程序,而不是作爲不同的Linux用戶ID運行的獨立應用程序包。

你可能會考慮讓你的客戶端應用程序發送一個特定類型的廣播來查詢您的應用程序的狀態,而不是依靠一個持久廣播消息像這樣。如果您的應用程序已啓動並正在運行,則它可以使用最新的狀態信息以自己的廣播(普通)進行回覆,並且需要自定義接收者權限,因爲它不會是粘性廣播。

+0

得到你所說的。但我試圖在沒有許可的情況下從非系統應用發送廣播。但它仍然會發送它。因此需要弄清楚實施是否正確? –

+0

對不起,我沒有關注你在說什麼。通過粘性廣播,沒有可以應用的許可。自定義Intents被髮送爲粘性也沒有限制。有系統定義的粘性廣播(例如'Intent.ACTION_BOOT_COMPLETED'),但系統不限制第三方應用發送自定義粘性廣播。 –