天哪,這篇文章終于說道如何自定義權限了,左盼右盼,其實這個自定義權限相當easy。為了方便敘述,我這邊會用到兩個app作為例子示范。
permission app: used to define a new permission
這個作為定義權限的app,我稱之為permission app.
client app: used to access the specified activity of permission app
這個作為訪問上述自定義權限的app,我稱之為client app
先看如何寫permission app
第一步
permission app很簡單,它的任務就是定一個permission,使用< permission>標簽即可,我們假設內容如下:
<permission android:name="custom.permission.startactivity" android:description="@string/permission_dcr" android:protectionlevel=signatureorsystem android:label="label"></permission>
第二步
然后在定一個activity,這個activity很簡單就是展示下一行字,如”hello from custiom permission activity!”這里就不詳述。
第三步
最重要的地方:我們需要為這個activity指明訪問權限,權限即為我們剛申請的權限,這個需要同樣需要在androidmanifest.xml文件中標識,如下:
<activity
android:name="com.example.custompermission.mainactivity"
android:label="@string/app_name" android:permission="custom.permission.startactivity">
</activity>
這個activity于是就被打上了必須使用” custom.permission.startactivity”權限才能訪問的印記。
接著寫client app
至于如何寫client app,那就so so so … easy了,只需兩步:
第一步
在androidmanifest.xml文件中首先申請權限,如下:
<uses-permission android:name="custom.permission.startactivity"/>
第二步
訪問permission app表明需要該權限的activity,代碼如下:
intent in = new intent();
in.setclassname("com.example.custompermission", "com.example.custompermission.mainactivity");
startactivity(in);
大功告成
我們可以測試下效果,首先安裝permission app,然后接著安裝client app,結果如下:
點擊之后
另外我曾經在android permission權限機制引子提到過protection level問題,這邊我同樣測試下這個protection level,下面結果中y表示可以正常訪問,n則表示不可以訪問。
需要注意的是,使用自定義permission的activity如果設置了:
<activity
android:name="com.example.custompermission.mainactivity"
android:label="@string/app_name" android:permission="custom.permission.startactivity">
<intent-filter>
<action android:name="android.intent.action.main" />
<category android:name="android.intent.category.launcher" />
</intent-filter>
那就不能從launcher中啟動該app,因為只有你的launcher必須使用了uses-permission去請求獲取custom.permission.startactivity權限,事實上你的launcher是不具備已經請求自定義權限的。
launcher會報:application is not installed on your phone. 的錯誤.