您的位置:首页 > 其它

第六篇 给特定的Activity加上权限

2016-03-12 10:21 387 查看

场景一、同一应用内部,启动另一个Activity,并给这个Activity  组件添加上权限,看同一应用中其他组件是否能正常访问?   布局界面很简单,在MainActivity中点击按钮,切换到同应用的另一个Activity中

MainActivity.java
public class MainActivity extends AppCompatActivity {

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

        findViewById(R.id.btnStart).setOnClickListener(new View.OnClickListener() {

            @Override

            public void onClick(View v) {
//显式Intent,指定了MyAty.class

                startActivity(new Intent(MainActivity.this,MyAty.class));

            }

        });

    }

}

Androidmanifest.xml
<?xml version="1.0" encoding="utf-8"?>

<manifest

    package="com.wang.activityaddpermission"

    xmlns:android="http://schemas.android.com/apk/res/android">

    <permission android:name="com.wang.activityaddpermission.permission.MyAty"/>
<!--这里没有写下面这行代码-->
<!--<uses-permission android:name="com.wang.activityaddpermission.permission.MyAty"/>-->

    <application

        android:allowBackup="true"

        android:icon="@mipmap/ic_launcher"

        android:label="@string/app_name"

        android:supportsRtl="true"

        android:theme="@style/AppTheme">

        <activity

            android:name=".MainActivity"

            android:label="MainActivity">

            <intent-filter>

                <action android:name="android.intent.action.MAIN"/>

                <category android:name="android.intent.category.LAUNCHER"/>

            </intent-filter>

        </activity>

        <activity

            android:name=".MyAty"

            android:label="MyAty"

            android:permission="com.wang.activityaddpermission.permission.MyAty">

        </activity>

    </application>

</manifest>

启动应用,点击按钮后,可以看到可以正常跳转到MyAty,说明,在相同应用中,给某个Activity加上权限,即使我们不使用该权限,比如<uses-permission android:name="com.wang.activityaddpermission.permission.MyAty"/>,照样可以正常启动
场景二、重新建一个Moudle   ,在这个应用中启动另一个应用中已经设定权限的组件(MyAty)
要在不同的应用中启动启动另一个应用的组件,由于不能直接看到另一个组件的类定义,所以,只能使用隐式的Intent,需要在   
场景一的,Androidmanifest.xml中给MyAty添加如下代码:
<activity

            android:name=".MyAty"

            android:label="MyAty"

            android:permission="com.wang.activityaddpermission.permission.MyAty">

            <intent-filter>

                <action android:name="com.wang.activityaddpermission.intent.action.MyAty"/>

                <category android:name="android.intent.category.DEFAULT"/>

            </intent-filter>

        </activity>

当前应用的MainActivity.java
public class MainActivity extends AppCompatActivity {

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

        findViewById(R.id.btnMyAty).setOnClickListener(new View.OnClickListener() {

            @Override

            public void onClick(View v) {

                startActivity(new Intent("com.wang.activityaddpermission.intent.action.MyAty"));

            }

        });

    }

}

启动当前应用,点击启动另一个应用的按钮,会直接报错,提示我们需要下面的权限:
java.lang.SecurityException: Permission Denial: starting Intent { act=com.wang.activityaddpermission.intent.action.MyAty cmp=com.wang.activityaddpermission/.MyAty } from ProcessRecord{b58f1a88 1586:com.wang.anotherapp/u0a50}
(pid=1586, uid=10050) requires com.wang.activityaddpermission.permission.MyAty  

在当前应用的的Androidmanifest.xml中,在manifest根目录下添加上下面的代码(也就是说这个应用有访问另一个应用组件的权限啦),当然别忘了要重新在手机或者模拟器上重新部署代码
<uses-permission android:name="com.wang.activityaddpermission.permission.MyAty"/>

总结:

如果要让应用1不能访问到应用2的Activity,那么我们有两种方法:

第一种,把应用2的Activity  添加上android:exported = "false"

第二种,给应用2的Activity  添加上权限,并

只声明权限,使用标签 <permission  android:name="  A"/>

在应用1中不使用权限,使用 <uses-permission  android:name="A"/>,当然这时候就会报错,可以自己用try{}catch(){}把启动应用2的代码包括起来,手动抛出个异常信息,可以使用Toast给个提示,说明你需要添加什么样的权限



如果一个应用要去访问另一个应用里面带有权限的组件,那么必须要在当前应用的Androidmanifest.xml的 manifest   跟元素下添加类似下面的代码,否则系统一直会提示需要权限,切记!!!

<uses-permission android:name="com.wang
4000
.activityaddpermission.permission.MyAty"/>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: