Android权限管理机制
1.Android权限管理。
Android权限来限制一些有限制的特性在应用程序之间以及应用组件访问功能的访问。在Android的发展,我们将满足网络的需要,我们需要添加所需的网络权限:<uses-permission android:name="android.permission.INTERNET" />
在开发中如果我们使用了某个权限,如果没有在l文件中相应申明,那么程序会运行有错误且提示:java.lang.SecurityException: Permission Denial ...
我们可以根据这个错误提示,一般情况下,在l中通过增加相应的 uses-permission 
Android权限列表:
在Android官方文档中查寻我们需要使用的权限。
developer.android/reference/android/Manifest.permission.html 不同的api有着不同
的权限,会出现兼容性问题。
2.Android自定义权限:
在有些场合我们或许会碰到如下的场景:用户在应用程序中进行操作时候,要启动另外一个应用程序的时候,我们一般是打开一个应用程序。并且进入Activity。有些情况,程序处于安全需要,这些操作就需要加上访问权限。Android提供了自定义权限功能。
有时候,我们可能遇到如下需求场景:当用户在一个应用程序中进行某项操作时,会启动另假设应用程序。在A中有MainActivity,应用程序B中有AActivity和BActivity。现在想通过A中的MainActivity直接打开B中的BActivity。
那么,如果不考虑权限,A中的MainActivity如何直接打开B中的BActivity呢?一般,可以通过如下方式:
1 public class MainActivity extends Activity {
2
3    private Button button;
4
5    @Override
6    protected void onCreate(Bundle savedInstanceState) {
7        Create(savedInstanceState);
8        setContentView(R.layout.activity_main);
9       
10        button = (Button)findViewById(R.id.button);
11        button.setOnClickListener(new View.OnClickListener() {
12            @Override
13            public void onClick(View v) {
14                Intent intent = new Intent();
15                intent.setClassName("standroid", "standroid.BActivity");
16                startActivity(intent);
17            }
18        });
19    }
20 }
我们在Intent中的setClass(String packageName, String className)方法,需要注意的是此时需要写上包的全名。与此同时我们在B中的BActivity的l文件中进行如下配置:
1 <activity
2    android:name="standroid.BActivity"
3    android:exported="true" >
4 </activity>
一定要为Activity中的属性android:exported设置值为true,以表示可以被其他应用程序打开。或者,也可以进行如下配置:
1 <activity
2    android:name="standroid.BActivity" >
android软件
3    <intent-filter>
4        <action android:name="" />
5    </intent-filter>
6 </activity>
为Activity设置一个空的action  android:name属性。
那么我们使用自定义权限具体步骤如下:
1.既然是自定权限,那么首先得申明此权限:
在B中的l中,一般是紧跟uses-sdk标签后,通过permission标签进行申明。
1 <permission android:description="string resource"
2 android:icon="drawable resource"
3 android:label="string resource"
4 android:name="string"
5 android:permissionGroup="string"
6 android:protectionLevel=["normal" | "dangerous" | "signature" | "signatureOrSystem"] />
Android的自定义权限流程,总的来说,定义了权限访问的控制,其他应用必须要有权限才能够访问到这个Activity Receiver。
Android 软件权限控制实现
1.Android广播机制
Android广播分为发送者和接收者两种类型。用于Android系统在某些情况下与App之间通信。从开发模式上来说,广播使用了观察者模式,是一种基于消息的发布订阅模式。所以从开发的角度,Android中的广播极大的程度解耦合,使得系统更加的轻便易于管理。
1.广播接收者BroadcastReceiver通过Binder机制向AMS(Activity Manager Service)进行注册;
2.广播发送者通过binder进行广播的发布;
3.AMS查符合相应条件(IntentFilter/Permission等)的BroadcastReceiver,将广播发送到BroadcastReceiver(一般情况下是Activity)相应的消息循环队列中;
4.消息循环执行拿到此广播,回调BroadcastReceiver中的onReceive()方法。
由此看来,广播的发送和接收是观察者模式的订阅和发布。AMS是处理中心。而且发布消息和消息的接收异步完成的。广播的发布不在关心是否有接收者接受消息。
 
自定义广播接收器需要继承基类BroadcastReceivre,并实现抽象方法onReceive(context, intent)方法。
1 public class MyBroadcastReceiver extends BroadcastReceiver {
2    public static final String TAG = "MyBroadcastReceiver";
3    public static int m = 1;
4
5    @Override
6    public void onReceive(Context context, Intent intent) {
7        Log.w(TAG, "intent:" + intent);
8        String name = StringExtra("name");
9        Log.w(TAG, "name:" + name + " m=" + m);
10        m++;
11       
12        Bundle bundle = Extras();
13       
14    }
15 }
 
BroadcastReceiver注册类型
BroadcastReceiver总体上可以分为两种注册类型:静态注册和动态注册。
1).静态注册:
直接在l文件中进行注册。规则如下:
<receiver android:enabled=["true" | "false"]
android:exported=["true" | "false"]
android:icon="drawable resource"
android:label="string resource"
android:name="string"
android:permission="string"
android:process="string" >
. . .
</receiver>
android:process  ——broadcastReceiver运行所处的进程。默认为app的进程。可以指定独立的进程(Android四大基本组件都可以通过此属性指定自己的独立进程)
常见的注册形式有:
<receiver android:name=".MyBroadcastReceiver" >
    <intent-filter>
        <action android:name="CONNECTIVITY_CHANGE" />
    </intent-filter>
    <intent-filter>
        <action android:name="android.intent.action.BOOT_COMPLETED" />
    </intent-filter>
</receiver>
1.广播发送及广播类型
  我们通常认为的广播发送和广播接收,表面上是Android 广播机制的实际体现,实际上这个并不是以广播对象存在。定义广播的过程实际就是广播意图的实现过程。通过广播发送的实体将这些题图传达出去。广播分为系统广播、有序广播、普通广播、粘性广播、App内广播。普通广播主要是开发者自己定义intent,普通广播会被有兴趣的接收者接受。系统广播是Android系统中内置的广播,在android系统中系统启动,屏幕点亮多会发出广播通知。有序广播是针对广播接收者而言的主要区别是在广播的发送过程调用了sendOrderedBroadcast()进行广播的发送。App应用广播主要是App跨越进程消息传递。App内广播具有安全性高,效率高的优点。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。