




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Android定义了一种权限方案来保护设备上的资源和功能。例如,在默认情况下,应用程序无法访问联系人列表、拨打电话等。下面就以拨打电话为例介绍一下系统对权限的要求。一般在我们的应用中,如果要用到拨打电话的功能,我们会这样编码:[java]viewplaincopyUriuri=Uri.parse("tel:12345678");Intentintent=newIntent(Intent.ACTION_CALL,uri);startActivity(intent);默认情况下,我们无权访问拨打电话的Activity,控制台将会报以下异常信息:[java]viewplaincopyERROR/AndroidRuntime:java.lang.SecurityException:PermissionDenial:startingIntent{act=ent.action.CALLdat=tel:12345678cmp=com.android.phone/.OutgoingCallBroadcaster}3requiresandroid.permission.CALL_PHONE看来,我们是缺少了CALL_PHONE这个权限,这个权限是Android系统自带的phone应用里定义的权限:[xhtml]viewplaincopy1.2.<usespermissionandroid:name="android.permission.CALL_PHONE"/>2.3.4.<activityandroid:name="OutgoingCallBroadcaster"5.android:permission="android.permission.CALL_PHONE"6.android:theme="@android:style/Theme.NoDisplay"7.android:configChanges="orientation|keyboardHidden">8.<!--CALLactionintentfilters,forthevariousways9.ofinitiatinganoutgoingcall.-->10.<intentfilter>11.<actionandroid:name="ent.action.CALL"/>12.〈4.<activityandroid:name="OutgoingCallBroadcaster"5.android:permission="android.permission.CALL_PHONE"6.android:theme="@android:style/Theme.NoDisplay"7.android:configChanges="orientation|keyboardHidden">8.<!--CALLactionintentfilters,forthevariousways9.ofinitiatinganoutgoingcall.-->10.<intentfilter>11.<actionandroid:name="ent.action.CALL"/>12.〈categoryandroid:name="ent.category.DEFAUL6.17.18.T"/>T"/><dataandroid:scheme="tel"/></intentfilter><intentfilter><actionandroid:name="ent.action.CALL"/><categoryandroid:name="ent.category.DEFAUL<dataandroid:scheme="voicemail"/>2.T"/>23./>24.v2"/>25."/>26.〈/activity〉28</intentfilter><intentfilter>〈actionandroid:name="ent.action.CALL"/>〈categoryandroid:name="ent.category.DEFAUL<dataandroid:mimeType="vnd.android.cursor.item/phone"<dataandroid:mimeType="vnd.android.cursor.item/phone_<dataandroid:mimeType="vnd.android.cursor.item/person</intentfilter><application...>2....</application><usespermissionandroid:name="android.permission.CALL_PHONE"/>这告诉系统,我们的应用使用了此权限,我们有权访问拨打电话的Activity。我们不仅要问,为什么系统会这样设计呢?答案是为了保护用户资源的安全。要想使用此功能,必须在应用中声明权限信息,这样一来,在用户安装此应用时系统会从应用中提取出权限信息,告诉用户该应用使用到了哪些功能,由用户判断该应用是否损害自己的安全。接下来由我来演示一下权限的定义和使用,我们建立一个phone项目,项目结构如下:』箜phoneJ占src工fficom.scott.phone[>[T]MainActivity.java[T|PhoneActivityJava[>浮gen[GeneratedJavaFile引•虱Android2.2ibiba
AassetsresAndroidManifest.xml国defauIp&rties我们设计的流程是在MainActivity中点击按钮,然后跳转到PhoneActivity中,我们会为PhoneActiivty定义相应的权限。ibiba
A我们先看一下MainActivity和PhoneActivity的代码:
MainActivity.java如下:[java]viewplaincopypackagecom.scott.phone;2.importandroid.app.Activity;importandroid.content.Intent;importandroid.os.Bundle;importandroid.view.View;importandroid.widget.Button;8.publicclassMainActivityextendsActivity{@OverridepUblicvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.main);Buttonbtn=(Button)findViewById(R.id.btn);btn.setOnClickListener(newView.OnClickListener(){@OverridepUblicvoidonClick(Viewv){startActivity(newIntent(MainActivity.this,PhoneActivity.class));TOC\o"1-5"\h\z}});}}PhoneActivity.java如下:[java]viewplaincopypackagecom.scott.phone;2.importandroid.app.Activity;importandroid.os.Bundle;importandroid.widget.TextView;6.pUblicclassPhoneActivityextendsActivity{@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);TextViewtv=newTextView(this);tv.setText("Yes!Itworks.");setContentView(tv);}
}最重要的是AndroidManifest.xml文件,我们所有的权限声明配置都在此文件中完成:[xhtml]viewplaincopy<?xmlversion="1.0"encoding="utf-8"?><manifestxmlns:android="/apk/res/android"package="com.scott.phone"android:versionCode="1"android:versionName="1.0">6.<!--声明一个权限一>〈permissionandroid:protectionLevel="normal"android:name="scott.permission.MY_CALL_PHONE"/>10.〈applicationandroid:icon="@drawable/icon"android:label="@string/app_name">〈activityandroid:name=".MainActivity"android:label="@string/app_name"><intentfilter><actionandroid:name="ent.action.MAIN"/><categoryandroid:name="ent.category.LAUNCHER"/></intentfilter></activity><!--为Activity应用已定义的权限--><activityandroid:name=".PhoneActivity"android:permission="scott.permission.MY_CALL_PHONE"><intentfilter><!--注意这个action在其他应用中可使用此action访问此Activity--><actionandroid:name="ent.action.MY_CALL"/><categoryandroid:name="ent.category.DEFAULT"/></intentfilter></activity></application><!--在同一应用中访问PhoneActivity也需要加上权限--><usespermissionandroid:name="scott.permission.MY_CALL_PHONE"/><usessdkandroid:minSdkVersion="8"/></manifest>
需要注意的是,在声明权限时需要一个android:protectionLevel的属性,它代表“风险级别”。必须是以下值之一:normal、dangerous、signature、signatureOrSystem。normal表示权限是低风险的,不会对系统、用户或其他应用程序造成危害。dangerous表示权限是高风险的,系统将可能要求用户输入相关信息,才会授予此权限。signature告诉Android,只有当应用程序所用数字签名与声明此权限的应用程序所有数字签名相同时,才能将权限授给它。signatureOrSystem告诉Android,将权限授给具有相同数字签名的应用程序或Android包类,这一级别适用于非常特殊的情况,比如多个供应商需要通过系统影像共享功能时。另外一个是android:permissionGroup属性,表示一个权限组。可以将权限放在一个组中,但对于自定义权限,应该避免设置此属性。如果确实希望设置此属性,可以使用以下属性代替:android.permission-group.SYSTEM_TOOLS。下面是两个活动的截图:猫HD©he强IB徊17:11phoneYes!Itworks.以上过程都是在一个内部完成的,现在假如我们的这个phone应用作为系统内置的应用,做为开发者,我们新建一个app,然后访问phone应用里的PhoneActivity。app的结构图如下:』appJ回src工田com.scott.app>\i]MainActivity.java理gen^GeneratedJavaFil&s]丽Android2.2卷assets邕resCl;AndroidManifest.xml[B]defauIperties我们在MainActivity里放置一个按钮,点击之后跳转到phone应用的PhoneActivity中。MainActivity.java代码如下:[java]viewplaincopypackagecom.scott.app;2.3.importandroid.app.Activity;3.importandroid.content.Intent;importandroid.os.Bundle;importandroid.view.View;importandroid.widget.Button;8.9.publiccla
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 茶叶采摘与加工茶园租赁合作协议
- 塌陷区治理改造方案
- 医学考试题试题及答案
- 嵌入式管理面试题及答案
- 前台走廊物资采购方案
- 投资集团面试题及答案
- 企业重点目标分解方案
- 差旅住宿品质保障与客户评价反馈合同
- 小区上水改造项目方案
- 食品安全员专业能力培训大纲
- GB/T 77-2007内六角平端紧定螺钉
- 中华人民共和国安全生产法
- 九年一贯制学校教育教学管理制度汇编
- GA/T 1105-2013信息安全技术终端接入控制产品安全技术要求
- 危险化学品MSDS(氯化铵)
- 《C++语言基础》全套课件(完整版)
- 钢筋混凝土框架结构设计讲义
- 《材料成型装备及自动化》课程大纲
- 保温材料进场质量检验表
- DG-TJ 08-2122-2021 保温装饰复合板墙体保温系统应用技术标准
- GB∕T 23937-2020 工业硫氢化钠
评论
0/150
提交评论