實現這樣的功能:兩個應用程式A和B,B要有相應的許可權才能訪問A中的某個Activity。
1。首先看A的實現
先在A的Activity裡加一個TextView,寫些內容方便等下檢驗。下面設定manifest.xml,增加一個自訂的許可權
代碼
<?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>
底線部分是要注意的。
第一個底線,這個Activity的android:name要寫包名+類名:giuz.blog1.ActivityBlog1,不然等下會報找不到Activity的錯誤。
<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來訪問,在My Code裡,下面的代碼是放在一個按鈕的點擊事件中的:
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>
這樣B就有許可權訪問了。
貼兩張運行