2013-12-12 39 views
1

按照docs,Android清單文件可以有一個Service的語法如下:如何需要多個權限啓動或綁定到服務

<service android:enabled=["true" | "false"] 
     android:exported=["true" | "false"] 
     android:icon="drawable resource" 
     android:isolatedProcess=["true" | "false"] 
     android:label="string resource" 
     android:name="string" 
     android:permission="string" 
     android:process="string" > 
    . . . 
</service> 

特別指定的權限屬性:

是一個實體必須以 推出的服務或綁定到其權限的名稱。

但似乎我不能要求一個實體啓動我的服務的多個權限。這是真的嗎?無論如何要繞過這個?

這裏#2我發現的最接近是this answer這裏筆者說:

版本的Android服務可以有多個權限,但權限是在應用程序級別授予的,而不是在服務水平 。

但他接着解釋<uses-permission>屬性,這不是我正在尋找的。 Another answer甚至進一步降低了我的希望。看來這確實是不可能的。

如果是這樣的話,我考慮的選擇是對我要求,讓他們作爲一切工作的轉發給負責此項工作的實際服務的每個權限一個服務。有什麼更好的想法

回答

3

事實是否真的如此呢?

在清單中的自動保護方面,是的。這是99.9%的情況。

反正是有規避呢?

使用某些東西like checkCallingPermission()檢查Java代碼中的其他權限。

但是他接着解釋了我不在尋找的屬性。

正確。

我正在考慮的替代方案是針對每個我需要的權限提供一項服務,並使其作爲負責執行此項工作的實際服務的代理商。

這隻會意義,如果你想有一個邏輯上或許可,通常是主叫必須有權限X 許可Y.直到你的問題這一點上,我曾以爲,你想的邏輯與的權限(調用者必須持有允許X 許可Y)。

我想不出一種情況,即傳入權限的邏輯或是有用的,更不用說必要了。也就是說,如果您使用startService()的命令模式,在不導出「真實」服務的情況下使用命令模式,以及在從導出的服務中轉發命令之後調用stopSelf(),應該可以解決您的解決方法。如果你的願景是使用這種代理方式與綁定模式,使用bindService(),可能$DEITY憐憫你的靈魂,因爲你會需要它。

相關問題