ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

移动安全-安卓权限获取

2021-05-03 09:31:06  阅读:175  来源: 互联网

标签:BActivity permission 访问 安卓 获取 Activity android 权限


Android的系统权限

Android的系统权限不是由用户控制,而是由开发者根据开发的需要控制相关权限的开放与否,权限控制主要放置在AndroidManifest.xml文件中。将如下的权限控制属性写入AndroidManifest.xml文件就可以获取相应的系统权限。如果在开发中遇到一些调试的问题很可以就是权限的原因。

Android常见的权限

访问登记属性:android.permission.ACCESS_CHECKIN_PROPERTIES ,读取或写入登记check-in数据库属性表的权限   
获取所处位置:android.permission.ACCESS_COARSE_LOCATION,通过WiFi或移动基站的方式获取用户所处的经纬度信息,定位精度大概误差30~1500米   
获取精确位置: android.permission.ACCESS_FINE_LOCATION,通过GPS芯片接收卫星的定位信息,定位精度达10米以内  访问定位额外命令:android.permission.ACCESS_LOCATION_EXTRA_COMMANDS,允许程序访问额外的定位提供者指令  获取模拟定位信息: android.permission.ACCESS_MOCK_LOCATION,获取模拟定位信息,一般用于帮助开发者调试应用   获取网络状态:android.permission.ACCESS_NETWORK_STATE,获取网络信息状态,如当前的网络连接是否有效   
访问Surface Flinger:android.permission.ACCESS_SURFACE_FLINGER,Android平台上底层的图形显示支持,一般用于游戏或照相机预览界面和底层模式的屏幕截图   
获取WiFi状态:android.permission.ACCESS_WIFI_STATE,获取当前WiFi接入的状态以及WLAN热点的信息   
账户管理: android.permission.ACCOUNT_MANAGER,获取账户验证信息,主要为GMail账户信息,只有系统级进程才能访问的权限   
验证账户:android.permission.AUTHENTICATE_ACCOUNTS,允许一个程序通过账户验证方式访问账户管理ACCOUNT_MANAGER相关信息   
电量统计: android.permission.BATTERY_STATS,获取电池电量统计信息   
绑定小插件: android.permission.BIND_APPWIDGET,允许一个程序告诉appWidget服务需要访问小插件的数据库,只有非常少的应用才用到此权限      
绑定设备管理: android.permission.BIND_DEVICE_ADMIN,请求系统管理员绑定输 接收receiver,只有系统才能使用。   
输入法: android.permission.BIND_INPUT_METHOD ,请求InputMethodService服务,只有系统才能使用。   
绑定RemoteView:android.permission.BIND_REMOTEVIEWS,必须通过RemoteViewsService服务来请求,只有系统才能用  绑定壁纸:android.permission.BIND_WALLPAPER,必须通过WallpaperService服务来请求,只有系统才能用   
使用蓝牙:android.permission.BLUETOOTH,允许程序连接配对过的蓝牙设备   
蓝牙管理:android.permission.BLUETOOTH_ADMIN,允许程序进行发现和配对新的蓝牙设备   
变成砖头:android.permission.BRICK,能够禁用手机,非常危险,顾名思义就是让手机变成砖头   
WAP PUSH广播:android.permission.BROADCAST_WAP_PUSH,WAP PUSH服务收到后触发一个广播   
拨打电话:android.permission.CALL_PHONE,允许程序从非系统拨号器里输入电话号码   
通话权限: android.permission.CALL_PRIVILEGED,允许程序拨打电话,替换系统的拨号器界面   
拍照权限: android.permission.CAMERA,允许访问摄像头进行拍照   
改变组件状态 :android.permission.CHANGE_COMPONENT_ENABLED_STATE,改变组件是否启用状态   
改变配置: android.permission.CHANGE_CONFIGURATION,允许当前应用改变配置,如定位   
改变网络状态 :android.permission.CHANGE_NETWORK_STATE,改变网络状态如是否能联网   
改变WiFi多播状态 :android.permission.CHANGE_WIFI_MULTICAST_STATE,改变WiFi多播状态   
改变WiFi状态 :android.permission.CHANGE_WIFI_STATE,改变WiFi状态   
清除应用缓存:android.permission.CLEAR_APP_CACHE,清除应用缓存   
清除用户数据 :android.permission.CLEAR_APP_USER_DATA,清除应用的用户数据   
底层访问权限:android.permission.CWJ_GROUP,允许CWJ账户组访问底层信息   
手机优化大师扩展权限 :android.permission.CELL_PHONE_MASTER_EX,手机优化大师扩展权限   
控制定位更新 :android.permission.CONTROL_LOCATION_UPDATES,允许获得移动网络定位信息改变   
删除缓存文件:android.permission.DELETE_CACHE_FILES,允许应用删除缓存文件   
删除应用:android.permission.DELETE_PACKAGES,允许程序删除应用   
电源管理:android.permission.DEVICE_POWER,允许访问底层电源管理   
应用诊断:android.permission.DIAGNOSTIC,允许程序到RW到诊断资源   
强制后退: android.permission.FORCE_BACK,允许程序强制使用back后退按键,无论Activity是否在顶层
#Android自定义权限   
有时候,我们可能遇到如下需求场景:当用户在一个应用程序中进行某项操作时,会启动另外一个应用程序,最常见的时直接打开了另外一个应用程序,并进入其中某个Activity(如:有的应用中有推荐应用列表,当用户点击时程序会首先判断其他应用有无安装,若无则提示用户下载,如有则直接打开进入)。有时候,处于安全等需要,此类操作需要加上受限制性的访问限制,那么怎么办呢?Android中为我们提供了自定义权限。   为了讲清自定义权限,先以不同的程序之间访问Activity增加权限限制为例。假设应用程序A中有MainActivity,应用程序B中有AActivity和BActivity。现在想通过A中的MainActivity直接打开B中的BActivity。   
那么,如果不考虑权限,A中的MainActivity如何直接打开B中的BActivity呢?   
一般可以通过如下方式:

public class MainActivity extends Activity {          
 private Button button;           
@Override           
protected void onCreate(Bundle savedInstanceState)
 {                   
super.onCreate(savedInstanceState);                   
setContentView(R.layout.activity_main);                       
button = (Button)findViewById(R.id.button);                  
button.setOnClickListener(new View.OnClickListener() 
{                          
@Override                          
public void onClick(View v) 
{                                 
Intent intent = new Intent();                                 
 intent.setClassName("com.example.testandroid", "com.example.testandroid.BActivity");                                  
startActivity(intent);                          
}                  
});          } }

这段代码很好理解,主要是通过Intent中的setClass(String packageName, String className)方法,需要注意的是此时需要写上包的全名。同时,针对B中的BActivity需要在AndroidManifest.xml文件中进行如下配置:

<activity          
         android:name="com.example.testandroid.BActivity"          
         android:exported="true" >  
</activity> 
一定要为Activity中的属性android:exported设置值为true,以表示可以被其他应用程序打开。或者,也可以进行如下配置:
 <activity        
         android:name="com.example.testandroid.BActivity" >        
        <intent-filter>                
               <action android:name="" />         
       </intent-filter> </activity>

为Activity设置一个空的action android:name属性。   
至此,我们还没有用到自定义权限。假设现在需要对外部应用程序直接打开BActivity做些访问性限制,为其增加一个自定义权限,这样,只有在声明了此自定义权限的外部应用,才具有资格打开BActivity。
具体步骤如下:   
(1)既然是自定权限,那么首先得申明此权限:   
在B中的AndroidManifest.xml中,一般是紧跟uses-sdk标签后,通过permission标签进行申明。

<permission android:description="string resource" 
android:icon="drawable resource"
android:label="string resource" 
android:name="string" android:permissionGroup="string"
android:protectionLevel=["normal" | "dangerous" | "signature" | "signatureOrSystem"] />

各属性具体含义如下:
属性含义
(2)当B中BActivity进行权限限定时,需要对BActivity进行如下声明:

<activity         
android:name="com.example.testandroid.BActivity"         
android:exported="true"         
android:label="B"         
android:permission="corn.permission.CORN_OWN" > </activity>

(3)此时外部应用A中的Activity想直接打开B中BActivity,则需要添加上相应权限:

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

这就是Activity自定义权限的一般性流程。总体说来,当不同应用间Activity Receiver定义了权限并进行了外部访问权限限定时,外部应用则必须具备此权限才能直接访问此Activity Receiver。

添加权限操作

使用eclipse新建Android Application Project,一路默认下来,就可以得到最基本的安卓文件结构,此时可以看到下图:
文件结构

apk文件的所有权限都存储在AndroidManifest.xml中,双击打开permission标签,点击add按键,添加Uses Permission,以添加录音权限为例,在name栏中输入Android.permission.RECORD_AUDIO,结果如下图:
添加权限
可以点击上图的AndroidManifest.xml查看源代码。
源代码
将该文件打包为apk文件安装到版本较低的实机中可以看到申请了录音权限。

标签:BActivity,permission,访问,安卓,获取,Activity,android,权限
来源: https://blog.csdn.net/weixin_46763552/article/details/116351437

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有