#Android学习#Android权限

请求权限,如访问网页的权限

在安装新App或者使用现有App的时候,大家都有碰到过应用获取权限的问题,比如是否允许使用摄像头,是否允许获取通讯录等等,这些权限一般都是在AndroidManifest.xml里添加。以访问网页权限为例。
创建一个新应用,在布局里添加一个WebView的组件,用于展示网页的内容

// content_main.xml
    <WebView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/webView">
    </WebView>

在MainActivity里,添加以下内容

    // MainActivity onCreate()
        webView = (WebView) findViewById(R.id.webView);
        webView.loadUrl("http://www.baidu.com");

最后,为了让webView有访问网页的权限,需要在AndroidManifest里添加以下内容

<uses-permission android:name="android.permission.INTERNET"></uses-permission>

代码权限检查

代码权限检查的使用场景还不熟悉,以后碰到相关问题会进行补充,但这个实现起来也很简单。新建一个类Hello,并给这个类添加一个sayHello的函数,并且对这个函数进行权限检查,满足的时候输出一句话,不满足则输出另外一个信息

public class Hello {
    // 自定义的权限名称
    public static final String PERMISSION_SAY_HELLO = "com.cyfloel.learnpermission.permission.SAYHELLO";
    public static void sayHello(Context context){
        // 检查是否有权限运行
        int checkResult = context.checkCallingOrSelfPermission(PERMISSION_SAY_HELLO);
        if (checkResult != PackageManager.PERMISSION_GRANTED){
            // 没有权限,则抛出安全错误
            throw new SecurityException("没有权限say hello");
        }
        // 有权限,则输出一个log信息
        Log.i("HELLO","有权限Say Hello!");
    }
}

在MainActivity的onCreate函数中,调用sayHello

// 将MainActivity做为context对象
Hello.sayHello(this)

如果没有在AndroidManifest里添加使用权限的声明,则会抛出安全错误,如果添加就会输出log信息

// AndroidManifest
// 声明自定义的权限
<permission android:name="com.cyfloel.learnpermission.permission.SAYHELLO"></permission>
// 添加使用权限
<uses-permission android:name="com.cyfloel.learnpermission.permission.SAYHELLO"></uses-permission>

添加组件权限

为Activity添加权限要求,当其他App启动这个Activity时,需要满足权限才能启动

// APP AndroidManifest
<permission android:name="com.cyfloel.myactivitypermission.permission.ANOTHERACTIVITY"></permission>

//App AndroidManifest application中的内容
        <activity
            android:name=".AnotherActivity"
            android:label="@string/title_activity_another"
            android:permission="com.cyfloel.myactivitypermission.permission.ANOTHERACTIVITY"
            android:theme="@style/AppTheme.NoActionBar">
            <intent-filter>
                <category android:name="android.intent.category.DEFAULT"></category>
                <action android:name="com.cyfloel.myactivitypermission.intent.action.ANOTHERACTIVITY"></action>
            </intent-filter>
        </activity>
// App MainActivity
    findViewById(R.id.btnStartAnotherActivity).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                      //AnotherActivity.ACTION=
                      //"com.cyfloel.myactivitypermission.intent.action.ANOTHERACTIVITY";
                      //一个常量,定义与AnotherActivity, 对应AndroidManifest中的action
                startActivity(new Intent(AnotherActivity.ACTION));
            }
        });
// AnotherApp MainActivity
        findViewById(R.id.btnStartAnotherActivity).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                String intentAction = "com.cyfloel.myactivitypermission.intent.action.ANOTHERACTIVITY"
                Intent intent = new Intent(intentAction)
                startActivity(intent);
            }
        });
// AnotherApp AndroidManifest
<uses-permission android:name="com.cyfloel.myactivitypermission.permission.ANOTHERACTIVITY"></uses-permission>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值