博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【Android进阶篇】自定义应用权限
阅读量:4131 次
发布时间:2019-05-25

本文共 2667 字,大约阅读时间需要 8 分钟。

在Android里,不是只有网络、信息、蓝牙等会受到保护,我们需要申请权限才能访问,我们自己编写的应用也可以受到Android系统的保护,让其他应用也需要先获取权限才能访问。下面介绍一下如何给应用的Activity自定义权限。

我们会通过三步来实现:
  • 首先,创建两个Android项目,第二个访问第一个的Activity;
  • 然后,给第一个应用的Activity的设置权限,再让第二个访问,看会发生什么
  • 最后,是第二个应用获取了权限后再访问第一个应用的Activity。

实例步骤:
1. 创建Android项目 Test1,包名为 com.test1 ,修改一下acivity_main.xml,把Hello,World改为“这是Test1”,如下:
[html] 
  1. <TextView  
  2.         android:layout_width="wrap_content"  
  3.         android:layout_height="wrap_content"  
  4.         android:text="这是Test1" />  



2. 创建Android项目 Test2,界面文件里放一个Button,然后在MainActiivty编写代码:
[java] 
  1. public class MainActivity extends ActionBarActivity {  
  2.   
  3.  private Button btn;  
  4.    
  5.     @Override  
  6.     protected void onCreate(Bundle savedInstanceState) {  
  7.         super.onCreate(savedInstanceState);  
  8.         setContentView(R.layout.activity_main);  
  9.         btn = (Button) findViewById(R.id.btn);  
  10.         btn.setOnClickListener(new OnClickListener(){  
  11.   
  12.    @Override  
  13.    public void onClick(View v) {  
  14.     // 跳转到另一个应用Test1的Activity  
  15.     Intent intent = new Intent();  
  16.     //通过Android的name进行访问跳转,跳转到Test1的MainActivity  
  17.     intent.setClassName("com.test1""com.test1.MainActivity");  
  18.     startActivity(intent);  
  19.    }  
  20.            
  21.         });  
  22.     }  
  23. }  

里面跳转的代码大家得注意一下,使用的是setClassName,因为使用setClass会报错的。
另外,得在Test2的AndroidMainfest清单中注册一下Test1的Activity,如下:
[html] 
  1. <activity android:name="com.test1.MainActivity"></activity>  

3. 运行两个项目,然后点击Test2的按钮,可以看到成功跳转到了Test1的Activity,注意,这不是同一个应用的跳转,而是不同应用之间的界面在跳转!结果图:
                   
      


4. 下面我们开始给Test1设置权限,权限的设置分为两步:
首先是新建<permission>标签,然后是在需要设置权限的地方设置权限
如下,给Test1的com.test1.MainActivity设置权限:
[html] 
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <manifest xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     package="com.test1"  
  4.     android:versionCode="1"  
  5.     android:versionName="1.0" >  
  6.   
  7.     <uses-sdk  
  8.         android:minSdkVersion="8"  
  9.         android:targetSdkVersion="15" />  
  10.   
  11.     <permission   
  12.         android:name="permisson.test"  
  13.         android:protectionLevel="normal"  
  14.         android:label="权限示例">  
  15.           
  16.     </permission>  
  17.       
  18.     <application  
  19.         android:allowBackup="true"  
  20.         android:icon="@drawable/ic_launcher"  
  21.         android:label="@string/app_name"  
  22.         android:theme="@style/AppTheme"   
  23.          >  
  24.         <activity  
  25.             android:name=".MainActivity"  
  26.             android:label="@string/app_name"   
  27.             android:permission="permission.test">  
  28.             <intent-filter>  
  29.                 <action android:name="android.intent.action.MAIN" />  
  30.   
  31.                 <category android:name="android.intent.category.LAUNCHER" />  
  32.             </intent-filter>  
  33.         </activity>  
  34.     </application>  
  35.   
  36. </manifest>  

权限的名字就做permisson.test,在activity标签用permisson属性设置权限(
这些标签属性不记得,可以使用【alt+/】组合键)。

好了,重新运行Test1,然后再用Test2来访问Test1里的Activity,程序崩溃,LogCat结果如下:
里面有这么一句:requires permission.TEST,就表明我们给应用获取这一权限。(
顺带提一句,现在我们自己也访问不了Test1,会提示“未安装此应用程序”之类的,这是因为Test1自己也没有获取访问它的主Activity的权限。。。

5. 给Test2设置权限:
[html] 
  1. <uses-permission  
  2.         android:name="permission.TEST"/>   
重新运行程序,然后点击按钮,可看到成功跳转,结果和前面一样。此时在Test1自己访问不了自己的情况下,Test2却可以访问,就是因为Test2有权限,但Test1却没有这个权限的缘故。

通过自定义权限,我们可以很好的保护自己的Activity以及其他组件。
你可能感兴趣的文章
女码农家里给介绍个程序员,每次在微信只聊技术,无奈向网友求助
查看>>
华为码农:放弃工作3年的华为去了小公司,家人都不理解,难受!
查看>>
码农:遇到并发难题请架构师帮忙,他竟说“写代码的事不归他管”
查看>>
码农简历上自我评价写“哈哈”引面试官注意,招进后竟成技术主力!
查看>>
码农:与新来的程序员聊天发现他之前经历有假,该不该举报?
查看>>
作为码农你希望面试官当场指出你错误么?有面试官这样遭到投诉!
查看>>
好多程序员都认为写ppt是很虚的技能,可事实真的是这样么?
查看>>
如果按照代码行数发薪水会怎样?码农:我能刷到公司破产!
查看>>
程序员失误造成服务停用3小时,只得到半月辞退补偿,发帖喊冤
查看>>
码农:收到HR简历竟是前同事的,项目经历有好多水分,该怎么办?
查看>>
码农:很多人称我“技术”,感觉这是不尊重!纠正无果后果断辞职
查看>>
码农:误删线上200G的数据找回10%,煎熬一晚不知明天该怎么活!
查看>>
技术leader手下这样2个风格的码农,不知该让谁晋升!你会选谁?
查看>>
码农晒出高难面试题:觉得自己答的还可以!网友:都不会,尴尬!
查看>>
自称首席架构的码农简历被面试官曝出,网友:不看薪水的话比我牛
查看>>
php程序员看过来,这老外是在吐糟你吗?看看你中了几点!
查看>>
码农:我爸爸是很早那批程序员,网友:第一次看见码二代!
查看>>
为什么说程序员是“培训班出来的”就是鄙视呢?
查看>>
码农吐糟同事:写代码低调点不行么?空格回车键与你有仇吗?
查看>>
码农:一年前亲眼目睹同事被裁细节,如今遇到裁员自己便很淡然!
查看>>