Android 自定義權限詳解

1、自定義權限與使用

在用戶app中,自定義權限每每設定在 四大組件上Activity,Service,BroadcastReceiver,ContentProvider,做爲app的一部分,若是不容許組件被其餘調用,設置權限也是一種保護方式。html

在這裏咱們以BroadcastReceiver爲例,假定其屬於appA:java

package test.common.home;

public class StickyBroadcastReceiver extends BroadcastReceiver 
{
	public static final String Action = "com.sample.test.sticky.broadcast.receiver";
	public static final String PERMISSION = "com.sample.test.permission.sticky.receiver";
	@Override
	public void onReceive(Context context, Intent intent) 
	{
		int checkCallingOrSelfPermission = context.checkCallingOrSelfPermission(PERMISSION);
		//權限的檢測(實際上,這種檢測系統會自動檢測,若是經過的話纔會調用onReceive方法,咱們這裏特地指出,就是爲了明白系統檢測方式是怎樣的)
		//若是要檢測出2種效果,只能使用該BroadcastReceiver自身應用來實現,由於自身應用沒權限也可訪問該廣播
		if(PackageManager.PERMISSION_GRANTED == checkCallingOrSelfPermission) 
		{
			Toast.makeText(context, "受權成功", Toast.LENGTH_SHORT).show();
		}else{
			Toast.makeText(context, "受權失敗", Toast.LENGTH_SHORT).show();
		}
		
		if(intent!=null&&Action.equals(intent.getAction()))
		{
			Toast.makeText(context, intent.getStringExtra("info"), Toast.LENGTH_SHORT).show();
		}
	}

}

在到Manifest.xml文件中註冊android

首先自已權限並使用自定義權限app

<permission android:name="com.sample.test.permission.sticky.receiver" android:protectionLevel="normal" />
<uses-permission android:name="com.sample.test.permission.sticky.receiver"/>

而後註冊廣播ide

<receiver android:name="test.common.home.StickyBroadcastReceiver" 
        android:exported="true"
	android:permission="com.sample.test.permission.sticky.receiver" >
	<intent-filter >
		<action android:name="com.sample.test.sticky.broadcast.receiver"/>
	</intent-filter>
</receiver>

屬性說明測試

android:exported="true"  --->是否外部容許訪問,低版本中默認是true,高版本默認是false,請注意
android:permission="com.sample.test.permission.sticky.receiver"  --->外部訪問是須要檢測的權限

 

而後咱們建立appB,在appB中建立一個Activity用來發送廣播:spa

Intent intent = new Intent(StickyBroadcastReceiver.Action);
  intent.putExtra("info", "hello world");
  sendBroadcast(intent);

 

2、自定義權限測試

測試一:將appA中的StickyBroadcastReceiver設置爲android:exported設置爲false,不設置權限android:permissioncode

測試結果,發送廣播失敗:orm

Permission Denial: Accessing service ComponentInfo 

java.lang.SecurityException: Not allowed to bind to service Intent

測試二:將appA中的StickyBroadcastReceiver設置爲android:exported=true,不設置權限android:permissionxml

測試結果:

廣播接收正常

測試三:將appA中的StickyBroadcastReceiver設置爲android:exported設置爲true,設置權限android:permission="com.sample.test.permission.sticky.receiver"

在appB中不設置<uses-permission android:name="com.sample.test.permission.sticky.receiver"/>

測試結果

Permission Denial

測試四:在測試三的基礎上在AppB設置

<uses-permission android:name="com.sample.test.permission.sticky.receiver"/>

測試結果:廣播接收正常

 

i love android     i love android


 

由上可知,權限運行正常,因此你能夠試試了。

附加:

android:protectionLevel  --->保護級別,看這裏http://www.xuebuyuan.com/1873075.html

 

try doing it!

相關文章
相關標籤/搜索