Android Notes 之 权限管理

我的GitPage博客

前言

本文主要讲述Android中权限的管理。
这里首先将三个permission
1. uses-permission:指的是应用具有的权限,比如android.permission.INTERNET
2. permission:开发者自定义的权限,比如某个App中的一个Service或是一个Activity不允许不具备权限的App启动的话,就可以为该Service或是Activity设置权限
3. android:permission:这是为Activity或者是Service设置的权限

添加权限

代码中添加权限检查

在代码中调用context.checkCallingOrSelfPermission(SAY_HELLO_PERMISSION)检查权限,返回值有两种,PackageManager.PERMISSION_GRANTEDPackageManager.PERMISSION_DENY,前者表示具备权限,后者反之。在具备权限的情况下才能够调用sayHello方法。

public static final String SAY_HELLO_PERMISSION="com.android.tongs.checkpermissionincode.permission.SAY_HELLO_PERMISSION";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        findViewById(R.id.startMyAty).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                startActivity(new Intent(MainActivity.this,MyAty.class));
            }
        });
        sayHello(this);
    }


    public void sayHello(Context context){
        int checkResult = context.checkCallingOrSelfPermission(SAY_HELLO_PERMISSION);
        if(checkResult!= PackageManager.PERMISSION_GRANTED){
            throw new SecurityException("请检查sayHello权限");
        }
        System.out.println("Hello");
    }

此时要在AndroidManifest文件中对权限进行声明,不声明会抛出SecurityException异常。

<!-- 对自定义的权限进行声明 -->
<permission android:name="com.android.tongs.checkpermissionincode.permission.SAY_HELLO_PERMISSION" />
<!-- 声明本APP具有此权限 -->
<uses-permission android:name="com.android.tongs.checkpermissionincode.permission.SAY_HELLO_PERMISSION" />

为App的Activity添加权限

为Activity添加权限

<activity android:name=".MyAty" android:permission="com.android.tongs.checkpermissionincode.permission.Start_MyAty">
    <intent-filter>
        <category android:name="android.intent.category.DEFAULT"/>
        <action android:name="com.android.tongs.checkpermissionincode.intent.action.MyAty"/>
    </intent-filter>
</activity>

AndroidManifest文件中声明此自定义的权限

<permission android:name="com.android.tongs.checkpermissionincode.permission.Start_MyAty" />

此时必须在另一个App中声明具有此权限

<!--声明权限,以访问另一个App中的MyAty-->
<uses-permission android:name="com.android.tongs.checkpermissionincode.permission.Start_MyAty"/>

最后在另一个App中启动MyAty的方法是:

startActivity(new Intent("com.android.tongs.checkpermissionincode.intent.action.MyAty"));

在一个应用中启动另一个应用中的Activity的另一种方法,配置Intent-Filter,添加默认category,添加actioncom.android.tongs.checkpermissionincode.intent.action.MyAty.必须为包名+intent+action+类名,不然找不到此action。

总结

  1. 为了对权限进行更好的管理,同一个程序之间内的方法有时候也会设置权限,此时就要自定义一个权限出来,并在AndroidManifest文件中声明。
  2. 同一个App中启动Service或者是Activity不需要权限,即使给改Activity设置了权限,仍然可以访问。
  3. 不同的App之间为Activity设置权限,另外的App想要访问的话必须声明权限。

你可能感兴趣的:(权限)