2012-05-10 19 views
1

我有一個Android系統服務(而不是應用程序),它被android應用程序使用。我想爲此係統服務添加定製權限,然後應用程序必須擁有此權限才能訪問我的服務。 現在,我已經在/frameworks/base/core/res/AndroidManifest.xml中添加了一個驗證,例如com.test.testpermission。 但是我還應該怎麼做才能在系統服務中使用此權限?如何在Android框架中使用定製權限?

+0

採取CameraService,我不知道該怎麼Android框架允許在AndroidManifest.xml與服務相關聯。 – Jessie

回答

0

在服務代碼中,您需要將權限檢查添加到服務公開的所有公共API中。要檢查的權限,你可以使用這種方法:

private boolean checkPermission() { 
    if (getContext().checkCallingOrSelfPermission("com.test.testpermission") == PackageManager.PERMISSION_GRANTED) { 
     return true; 
    } 
    return false; 
} 

因此,客戶端應用程序必須有您的許可,在其清單中列出。

我從來沒有嘗試過,但我可以看到它被TelephonyRegistry服務使用爲例。

對於原生代碼,我可以在相機維修看到這一點:對於〔實施例

if (!checkCallingPermission(
        String16("android.permission.CAMERA"))) { 
       const int uid = getCallingUid(); 
       LOGE("Permission Denial: " 
        "can't use the camera pid=%d, uid=%d", pid, uid); 
       return PERMISSION_DENIED; 
      } 
+0

我檢查了android源代碼,它確實檢查了服務代碼的權限,正如你所說的。我會在我的服務中嘗試這個。感謝您的幫助:) – Jessie

+0

如果它的工作,它永遠不會傷害接受答案...;) –

+0

對不起,我忘了提及我的服務是用C++寫的像cameraservice。上面的方法被java中的一些服務所採用。你有什麼主意嗎?謝謝。 – Jessie