




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
实用标准文案Android 权限管理机制1.Android 权限管理。Android 权限来限制一些有限制的特性在应用程序之间以及应用组件访问功能的访问。在 Android 的发展,我们将满足网络的需要,我们需要添加所需的网络权限:在开发中如果我们使用了某个权限,如果没有在 AndroidManifest.xml 文件中相应申明,那么程序会运行有错误且提示: 我们可以根据这个错误提示,一般情况下,在 AndroidManifest.xml 中通过增加相应的uses-permissionAndroid 权限列表:在Android 官方文档中查寻我们需要使用的权限。 不同的api有着不同的权限,会出现兼容性问题。2.Android 自定义权限:在有些场合我们或许会碰到如下的场景: 用户在应用程序中进行操作时候, 要启动另外一个应用程序的时候,我们一般是打开一个应用程序。并且进入 Activity 。有些情况,程序处于安全需要,这些操作就需要加上访问权限。 Android 提供了自定义权限功能。有时候,我们可能遇到如下需求场景: 当用户在一个应用程序中进行某项操作时, 会启动另精彩文档实用标准文案假设应用程序。在 A中有MainActivity ,应用程序 B中有AActivity 和BActivity 。现在想通过A中的MainActivity 直接打开 B中的BActivity 。那么,如果不考虑权限, A中的MainActivity 如何直接打开 B中的BActivity 呢?一般,可以通过如下方式:1publicclassMainActivityextendsActivity{2privateButtonbutton;@OverrideprotectedvoidonCreate(BundlesavedInstanceState){7super.onCreate(savedInstanceState);8setContentView(R.layout.activity_main);910button=(Button)findViewById(R.id.button);11button.setOnClickListener(newView.OnClickListener(){12@Override13publicvoidonClick(Viewv){14Intentintent=newIntent();15intent.setClassName("com.example.testandroid","com.example.testandroid.BActivity");16startActivity(intent);精彩文档实用标准文案17 }18 });}}我们在Intent 中的setClass(StringpackageName,StringclassName) 方法,需要注意的是此时需要写上包的全名。与此同时我们在 B中的BActivity 的AndroidManifest.xml 文件中进行如下配置:<activityandroid:exported="true"></activity>一定要为Activity 中的属性android:exported 设置值为 true,以表示可以被其他应用程序打开。或者,也可以进行如下配置:<activity<intent-filter>4 <actionandroid:name=""/></intent-filter></activity>为Activity 设置一个空的 action android:name 属性。那么我们使用自定义权限具体步骤如下:精彩文档实用标准文案1.既然是自定权限,那么首先得申明此权限:在B中的AndroidManifest.xml 中,一般是紧跟 uses-sdk 标签后,通过permission 标签进行申明。1<permissionandroid:description="stringresource"2android:icon="drawableresource"3android:label="stringresource"android:name="string"android:permissionGroup="string"6 android:protectionLevel=["normal" | "dangerous" | "signature" |"signatureOrSystem"]/>Android 的自定义权限流程,总的来说,定义了权限访问的控制,其他应用必须要有权限才能够访问到这个 ActivityReceiver 。Android 软件权限控制实现精彩文档实用标准文案1.Android 广播机制Android 广播分为发送者和接收者两种类型。 用于Android 系统在某些情况下与 App之间通信。从开发模式上来说,广播使用了观察者模式,是一种基于消息的发布订阅模式。所以从开发的角度, Android 中的广播极大的程度解耦合,使得系统更加的轻便易于管理。1.广播接收者 BroadcastReceiver 通过Binder 机制向AMS(ActivityManagerService) 进行注册;2.广播发送者通过 binder 进行广播的发布;3.AMS 查找符合相应条件( IntentFilter/Permission 等)的 BroadcastReceiver ,将广播发送到BroadcastReceiver (一般情况下是 Activity )相应的消息循环队列中;4.消息循环执行拿到此广播,回调 BroadcastReceiver 中的onReceive() 方法。由此看来,广播的发送和接收是观察者模式的订阅和发布。 AMS 是处理中心。而且发布消息和消息的接收异步完成的。广播的发布不在关心是否有接收者接受消息。自定义广播接收器需要继承基类 BroadcastReceivre ,并实现抽象方法 onReceive(context,intent)方法。1publicclassMyBroadcastReceiverextendsBroadcastReceiver{publicstaticfinalStringTAG="MyBroadcastReceiver";publicstaticintm=1;4@OverridepublicvoidonReceive(Contextcontext,Intentintent){精彩文档实用标准文案7Log.w(TAG,"intent:"+intent);8Stringname=intent.getStringExtra("name");9Log.w(TAG,"name:"+name+"m="+m);10m++;1112Bundlebundle=intent.getExtras();13}}BroadcastReceiver 注册类型BroadcastReceiver 总体上可以分为两种注册类型:静态注册和动态注册。1).静态注册:直接在AndroidManifest.xml 文件中进行注册。规则如下:<receiverandroid:enabled=["true"|"false"]android:exported=["true"|"false"]android:icon="drawableresource"android:label="stringresource"android:name="string"android:permission="string"精彩文档实用标准文案android:process="string">...</receiver>android:process ——broadcastReceiver 运行所处的进程。 默认为app的进程。可以指定独立的进程( Android 四大基本组件都可以通过此属性指定自己的独立进程)常见的注册形式有:<receiverandroid:name=".MyBroadcastReceiver"><intent-filter></intent-filter><intent-filter></intent-filter></receiver>1.广播发送及广播类型我们通常认为的广播发送和广播接收,表面上是 Android 广播机制的实际体现,实际上这个并不是以广播对象存在。 定义广播的过程实际就是广播意图的实现过程。 通过广播发送的实体将这些题图传达出去。广播分为系统广播、有序广播、普通广播、粘性广播、 App内广播。普通广播主要是开发者自己定义 intent,普通广播会被有兴趣的接收者接受。系精彩文档实用标准文案统广播是Android 系统中内置的广播,在 android 系统中系统启动,屏幕点亮多会发出广播通知。有序广播是针对广播接收者而言的主要区别是在广播的发送过程调用了sendOrderedBroadcast() 进行广播的发送。App 应用广播主要是 App跨越进程消息传递。App内广播具有安全性高,效率高的优点。通过广播实现软件权限监听Android 系统中广播的使用在各个方便多有体现。 在本系统中主要通过系统广播进行软件安装的捕获, Android 系统中软件的安装和卸载多会发出一条广播通知各个应用程序。我们通过广播的捕获我们可以获取到刚刚安装成功的软件信息。并且通过调用系统库资源获取软件安装的权限数据, 从而进行全新的控制。如图创建一个BootReceiver 用于接收软件安装成功的广播。 当有软件安装成功时候将会自动发送给我们的 BootReceiver 。@Overridepublic void onReceive(Context context,Intent intent){接收安装广播if(intent.getAction().equals( )){StringpackageName =intent.getDataString();StringpackName =packageName .split("age:")[1];PackageManager packManager =精彩文档实用标准文案context.getPackageManager();List<ApplicationInfo> infos=packManager .getInstalledApplications(PackageManager. GET_ACTIVITIES);}我们通过 BootReceiver 的onReceiver 中的方法获取广播,并且获取到软件安装成功的包名。我们在调用系统提供的功能模块进行权限的判断。for(ApplicationInfo info:infos){Log.i("app","appName--->" +info.packageName +""+packageName );if(packName.contains(info.packageName )){Log.i("app","相同");try{PackageInfo packInfo =packManager .getPackageInfo( info.packageName ,PackageManager. GET_PERMISSIONS);Stringpermissons []=packInfo.requestedPermissions ;获取该app的所有权限StringBuffer str=newStringBuffer();精彩文档实用标准文案intlength =permissons.length;for(int i=0;i<length ;i++){Log.i("app",permissons[i]);str.append(permissons[i]+"\n");}Log.i("permission" ,str.toString());
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 《杜甫生平》课件
- 新质生产力人才
- 佳木斯大学《软件体系结构与设计》2023-2024学年第二学期期末试卷
- 上海工会管理职业学院《口腔内科学》2023-2024学年第二学期期末试卷
- 辽宁省交通高等专科学校《医学营养学》2023-2024学年第二学期期末试卷
- 江苏省连云港市赣榆县重点中学2024-2025学年初三4月模拟考试化学试题文试题含解析
- 四川省成都市锦江区2025年数学四年级第二学期期末教学质量检测试题含解析
- 梧州医学高等专科学校《数学分析(三)》2023-2024学年第一学期期末试卷
- 四川省金堂中学2025届高三下学期3月摸底语文试题含解析
- 山东省德州庆云县联考2025届初三第二次中考科目教学质量检测试题化学试题试卷含解析
- GB/T 4437.1-2023铝及铝合金热挤压管第1部分:无缝圆管
- 市政工程消耗量定额 zya1-31-2015
- 《高等数学下册》(资料全集)
- 奢侈品买卖协议书范本
- 欧洲文化智慧树知到课后章节答案2023年下宁波大学
- 抖音账号运营服务投标方案
- 《新大学英语·跨文化交际阅读》Values Behind Sayings
- 风电项目开发前期工作流程
- 劳动保障部《关于劳动合同制职工工龄计算问题的复函》
- 国开2023春计算机组网技术形考任务二参考答案
- 200条健康小常识
评论
0/150
提交评论