【Android进阶篇】自定义应用权限
2015-08-10 17:38
477 查看
在Android里,不是只有网络、信息、蓝牙等会受到保护,我们需要申请权限才能访问,我们自己编写的应用也可以受到Android系统的保护,让其他应用也需要先获取权限才能访问。下面介绍一下如何给应用的Activity自定义权限。
我们会通过三步来实现:
首先,创建两个Android项目,第二个访问第一个的Activity;
然后,给第一个应用的Activity的设置权限,再让第二个访问,看会发生什么
最后,是第二个应用获取了权限后再访问第一个应用的Activity。
实例步骤:
1. 创建Android项目 Test1,包名为 com.test1 ,修改一下acivity_main.xml,把Hello,World改为“这是Test1”,如下:
[html] view
plaincopy
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="这是Test1" />
2. 创建Android项目 Test2,界面文件里放一个Button,然后在MainActiivty编写代码:
[java] view
plaincopy
public class MainActivity extends ActionBarActivity {
private Button btn;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn = (Button) findViewById(R.id.btn);
btn.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
// 跳转到另一个应用Test1的Activity
Intent intent = new Intent();
//通过Android的name进行访问跳转,跳转到Test1的MainActivity
intent.setClassName("com.test1", "com.test1.MainActivity");
startActivity(intent);
}
});
}
}
里面跳转的代码大家得注意一下,使用的是setClassName,因为使用setClass会报错的。
另外,得在Test2的AndroidMainfest清单中注册一下Test1的Activity,如下:
[html] view
plaincopy
<activity android:name="com.test1.MainActivity"></activity>
3. 运行两个项目,然后点击Test2的按钮,可以看到成功跳转到了Test1的Activity,注意,这不是同一个应用的跳转,而是不同应用之间的界面在跳转!结果图:
4. 下面我们开始给Test1设置权限,权限的设置分为两步:首先是新建<permission>标签,然后是在需要设置权限的地方设置权限
如下,给Test1的com.test1.MainActivity设置权限:
[html] view
plaincopy
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.test1"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="15" />
<permission
android:name="permisson.test"
android:protectionLevel="normal"
android:label="权限示例">
</permission>
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme"
>
<activity
android:name=".MainActivity"
android:label="@string/app_name"
android:permission="permission.test">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
权限的名字就做permisson.test,在activity标签用permisson属性设置权限(这些标签属性不记得,可以使用【alt+/】组合键)。
好了,重新运行Test1,然后再用Test2来访问Test1里的Activity,程序崩溃,LogCat结果如下:
里面有这么一句:requires permission.TEST,就表明我们给应用获取这一权限。(顺带提一句,现在我们自己也访问不了Test1,会提示“未安装此应用程序”之类的,这是因为Test1自己也没有获取访问它的主Activity的权限。。。)
5. 给Test2设置权限:
[html] view
plaincopy
<uses-permission
android:name="permission.TEST"/>
重新运行程序,然后点击按钮,可看到成功跳转,结果和前面一样。此时在Test1自己访问不了自己的情况下,Test2却可以访问,就是因为Test2有权限,但Test1却没有这个权限的缘故。
通过自定义权限,我们可以很好的保护自己的Activity以及其他组件。
我们会通过三步来实现:
首先,创建两个Android项目,第二个访问第一个的Activity;
然后,给第一个应用的Activity的设置权限,再让第二个访问,看会发生什么
最后,是第二个应用获取了权限后再访问第一个应用的Activity。
实例步骤:
1. 创建Android项目 Test1,包名为 com.test1 ,修改一下acivity_main.xml,把Hello,World改为“这是Test1”,如下:
[html] view
plaincopy
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="这是Test1" />
2. 创建Android项目 Test2,界面文件里放一个Button,然后在MainActiivty编写代码:
[java] view
plaincopy
public class MainActivity extends ActionBarActivity {
private Button btn;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn = (Button) findViewById(R.id.btn);
btn.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
// 跳转到另一个应用Test1的Activity
Intent intent = new Intent();
//通过Android的name进行访问跳转,跳转到Test1的MainActivity
intent.setClassName("com.test1", "com.test1.MainActivity");
startActivity(intent);
}
});
}
}
里面跳转的代码大家得注意一下,使用的是setClassName,因为使用setClass会报错的。
另外,得在Test2的AndroidMainfest清单中注册一下Test1的Activity,如下:
[html] view
plaincopy
<activity android:name="com.test1.MainActivity"></activity>
3. 运行两个项目,然后点击Test2的按钮,可以看到成功跳转到了Test1的Activity,注意,这不是同一个应用的跳转,而是不同应用之间的界面在跳转!结果图:
4. 下面我们开始给Test1设置权限,权限的设置分为两步:首先是新建<permission>标签,然后是在需要设置权限的地方设置权限
如下,给Test1的com.test1.MainActivity设置权限:
[html] view
plaincopy
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.test1"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="15" />
<permission
android:name="permisson.test"
android:protectionLevel="normal"
android:label="权限示例">
</permission>
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme"
>
<activity
android:name=".MainActivity"
android:label="@string/app_name"
android:permission="permission.test">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
权限的名字就做permisson.test,在activity标签用permisson属性设置权限(这些标签属性不记得,可以使用【alt+/】组合键)。
好了,重新运行Test1,然后再用Test2来访问Test1里的Activity,程序崩溃,LogCat结果如下:
里面有这么一句:requires permission.TEST,就表明我们给应用获取这一权限。(顺带提一句,现在我们自己也访问不了Test1,会提示“未安装此应用程序”之类的,这是因为Test1自己也没有获取访问它的主Activity的权限。。。)
5. 给Test2设置权限:
[html] view
plaincopy
<uses-permission
android:name="permission.TEST"/>
重新运行程序,然后点击按钮,可看到成功跳转,结果和前面一样。此时在Test1自己访问不了自己的情况下,Test2却可以访问,就是因为Test2有权限,但Test1却没有这个权限的缘故。
通过自定义权限,我们可以很好的保护自己的Activity以及其他组件。
相关文章推荐
- Arcgis Android 坐标转换
- Google 收购 Android 十周年 全面解读Android现状
- Android 第三方应用广告拦截实现
- android学习笔记(9)android程序调试学习
- Android中自定义Activity和Dialog的位置大小背景和透明度等
- 【姿势】Android 和 Mac 爆毁灭级安全漏洞
- Android屏幕适配全攻略(最权威的官方适配指导)
- Android 调试出现 could not get wglGetExtensionsStringARB
- Android--SlidingMenu 使用详解
- Android发送验证码的倒计时按钮
- Android工程结构
- Android(Java) 模拟登录知乎并抓取用户信息
- Android项目目录结构介绍
- Android 实现形态各异的双向侧滑菜单 自定义控件来袭
- android消息处理机制
- Android 用户界面交互---拖放(OnDragListener)效果
- Android 高手进阶之自定义View,自定义属性(带进度的圆形进度条)
- Android屏幕适配全攻略(最权威的官方适配指导)
- android学习笔记之通过Volley框架实现数据请求
- Android px、dp、sp之间相互转换