第六篇 给特定的Activity加上权限
2016-03-12 10:21
387 查看
场景一、同一应用内部,启动另一个Activity,并给这个Activity 组件添加上权限,看同一应用中其他组件是否能正常访问? 布局界面很简单,在MainActivity中点击按钮,切换到同应用的另一个Activity中
MainActivity.javapublic 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"/>
相关文章推荐
- 在共享DLL中使用MFC与在静态库中使用MFC的区别
- 使用 Git@OSC 管理代码
- CentOS卸载OpenJDK并安装Sun JDK
- 关于 AlphaGo 论文的阅读笔记
- 动态链表
- 斐波那契数列VI(原创题)
- AndroidStudio添加assets目录并获取其路径
- C++中引用(&)的用法和应用实例
- 第二周内容
- Android Studio - 使用第三方库
- vijos 1047 送给圣诞夜的礼品 矩阵
- 利用原生Javascript实现计算器(未完待续)
- 关于iframe与父窗口元素选取的问题
- HashMap与ConcurrentHashMap的区别
- 使用 JDBC 连接 Hive(ClassNotFoundException、No suitable driver found、Could not open client transport wit)
- 三次握手与四次挥手
- qt for Android 环境搭建 win10
- 也说TypeScript
- 视音频基础知识
- 我理解的 JavaScript 作用域