偶爾發現一個人寫的文章,是關於自定義權限的。具體的大家看這面這篇帖子的文章吧,我沒想到它能用到哪,但是確實很有意思。
實現這樣的功能:兩個應用程序A和B,B要有相應的權限才能訪問A中的某個Activity。
1。首先看A的實現
先在A的Activity裡加一個TextView,寫些內容方便等下檢驗。下面設置manifest.xml,增加一個自定義的權限
[html]
<span style="font-size:14px;"><?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="giuz.blog1" android:versionCode="1"
android:versionName="1.0">
<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name="giuz.blog1.ActivityBlog1"
android:label="@string/app_name"
android:permission="giuz.permission.SEE">
<intent-filter> <action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
<permission android:protectionLevel="normal" android:name="giuz.permission.SEE"></permission>
</manifest>
</span>
下劃線部分是要注意的。
第一個下劃線,這個Activity的android:name要寫包名+類名:giuz.blog1.ActivityBlog1,不然等下會報找不到Activity的錯誤。www.2cto.com
<permission android:protectionLevel="normal" android:name="giuz.permission.SEE"></permission>這句,android:protectionLevel是必須要的,它的值normal或者dangerous、signature、signatureOrSystem。android:name的值就是自定義的權限,格式是**.permission.**(giuz.x.permission.SEE也可以的)。2。B的實現B的Activity裡通過Intent來訪問,在我的代碼裡,下面的代碼是放在一個按鈕的點擊事件中的:
Intent intent = new Intent();//下面是用Component實現//如果我寫成intent.setClassName("giuz.blog1", "giuz.blog1.ActivityBlog1")//卻會報錯,不理解。intent.setComponent(new ComponentName("giuz.blog1", "giuz.blog1.ActivityBlog1"));startActivity(intent)
第二行的第一個參數是A的那個被訪問的Activity的包名,第二個參數是包名+類名
因為A現在有了自定義的權限,而B現在還沒有權限訪問,所以如果現在訪問會出現 Permission Denial的報錯。給B加上權限,就是在B的manifest.xml裡加上下面這句
<uses-permission android:name="giuz.permission.SEE"></uses-permission>