android 严振杰权限管理,Android权限管理之Permission(二)

Android权限机制:

权限是一种安全机制。Android权限主要用于限制应用程序内部某些具有限制性特性的功能使用以及应用程序之间的组件访问。

Android权限使用:

1.)在 AndroidManifest.xml 标签内使用声明使用某一个权限

1

例如申请使用网络权限

1

如果特定的权限必须申明使用,如果没有申请使用就会报出Permission Denial错误,例如访问通讯录报出如下错误

Caused by: java.lang.SecurityException: Permission Denial: reading com.androintacts.ContactsProvider2 uri content://contacts/data/phones from pid=23763, uid=10036 requires android.permission.READ_CONTACTS

解决此类错误我们只需根据提示添加对应的权限即可

1

2.)自定义权限permission

虽然这种使用场景不多见,但是在有些特定的场景下出于安全考虑就需要自定义权限了,比如两个APP之间需要共享数据而采用了ContentProvider,此时我们需要对一个app访问另外一个app的数据时需要添加权限申请。自定义权限通过标签

1

2

3

4

5

6

7

android:icon=”drawable resource”

android:label=”string resource”

android:name=”string”

android:permissionGroup=”string”

android:protectionLevel=[“normal” | “dangerous” |

“signature” | “signatureOrSystem”] />

android:description:对权限的描述,比lable更加的详细,介绍该权限的相关使用情况,比如当用户被询问是否给其他应用该权限时。注意描述应该使用的是string资源,而不是直接使用string串。

android:icon:用来标识该权限的一个图标。

android:label:权限的一个给用户展示的简短描述。方便的来说,这个可以直接使用一个string字串来表示,但是如果要发布的话,还是应该使用string资源来表示。

android:name:权限的唯一名字,由于独立性,一般都是使用包名加权限名,该属性是必须的,其他的可选,未写的系统会指定默认值。

android:permissionGroup: 权限所属权限组的名称,并且需要在这个或其他应用中使用标签提前声明该名称,如果没有声明,该权限就不属于该组。

android:protectionLevel:权限的等级

关于android:protectionLevel:权限的等级

normal  低风险权限,只要申请了就可以使用(在AndroidManifest.xml中添加标签),安装时不需要用户确认;

dangerous  高风险权限,安装时需要用户的确认才可使用;

signature  只有当申请权限的应用程序的数字签名与声明此权限的应用程序的数字签名相同时(如果是申请系统权限,则需要与系统签名相同),才能将权限授给它;

signatureOrSystem  签名相同,或者申请权限的应用为系统应用(在system image中),与signature类似,只是增加了rom中自带的app的声明 ,尽量不要使用该选项,因为signature已经适合绝大部分的情况。

对于普通和危险级别的权限,我们称之为低级权限,应用申请即授予。其他两级权限,我们称之为高级权限或系统权限。当应用试图在没有权限的情况下做受限操作,应用将被系统杀掉以警示。系统应用可以使用任何权限。权限的声明者可无条件使用该权限。

根据上面的介绍我们实战一下自定义权限如下

1

2

3

4

5

6

7

8

9

10

11

12

android:name="personprovider.permission.read"

android:description="@string/personprovider_permission_read_desstring"

android:icon="@mipmap/ic_launcher"

android:label="@string/personprovider_permission_read_labestring"

android:protectionLevel="normal"/>

android:name="personprovider.permission.write"

android:description="@string/personprovider_permission_write_desstring"

android:icon="@mipmap/ic_launcher"

android:label="@string/personprovider_permission_write_labestring"

android:protectionLevel="normal"/>

3.)自定义权限组permission-group

为了方便管理某一特定功能的权限,所以我会对权限进行分组,这时我们需要通过自定义一个权限组

1

2

3

4

android:icon="drawable resource"

android:label="string resource"

android:name="string"/>

android:description  这个属性用于给权限组定义一个用户可读的说明性文本。这个文本应该比标签更长、更详细。这个属性必须要引用一个字符串资源,跟label属性不一样,它不能够使用原生的字符串。

android:icon  这个属性定义了一个代表权限的图标。这个属性要使用包含图片定义的可绘制资源来定义。

android:label  这个属性给权限组定义了一个用户可读的名称。为了开发方便,在开发时,可以直接使用原生的字符串来设置这个属性。但是,当应用程序正式发布时,应该使用字符串资源来设置,以便能够像用户界面中其他的字符串一样能够被本地化。

android:name 这个属性定义了权限组的名称,它是能够分配给元素的permissionGroup属性的名称。

上面的权限组我们可以自定义为下面这种方式:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

android:name="personprovider.permission-group"

android:description="@string/personprovider_permission_group_desstring"

android:icon="@mipmap/ic_launcher"

android:label="@string/personprovider_permission_group_labelstring"/>

android:name="personprovider.permission.read"

android:description="@string/personprovider_permission_read_desstring"

android:icon="@mipmap/ic_launcher"

android:label="@string/personprovider_permission_read_labestring"

android:permissionGroup="personprovider.permission-group"

android:protectionLevel="normal"/>

android:name="personprovider.permission.write"

android:description="@string/personprovider_permission_write_desstring"

android:icon="@mipmap/ic_launcher"

android:label="@string/personprovider_permission_write_labestring"

android:permissionGroup="personprovider.permission-group"

android:protectionLevel="normal"/>

其他关于permission-tree这里就不介绍了,这个至今没有用到过,是为一组permissions声明了一个namespace。

4.)使用自定义权限

申请权限

1

2

在宿主上声明需要申请访问权限

1

2

3

4

5

6

7

android:name=".PersonProvider"

android:authorities="com.whoislcj.testsqlite.personprovider"

android:enabled="true"

android:exported="true"

android:readPermission="personprovider.permission..read"

android:writePermission="personprovider.permission..write"/>

总结:

本篇大致了解了Android的权限permission以及如何使用和自定义权限,下篇将总结学一下如何解决Android 6.0的权限的适配问题。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
智慧校园整体解决方案是响应国家教育信息化政策,结合教育改革和技术创新的产物。该方案以物联网、大数据、人工智能和移动互联技术为基础,旨在打造一个安全、高效、互动且环保的教育环境。方案强调从数字化校园向智慧校园的转变,通过自动数据采集、智能分析和按需服务,实现校园业务的智能化管理。 方案的总体设计原则包括应用至上、分层设计和互联互通,确保系统能够满足不同用户角色的需求,并实现数据和资源的整合与共享。框架设计涵盖了校园安全、管理、教学、环境等多个方面,构建了一个全面的校园应用生态系统。这包括智慧安全系统、校园身份识别、智能排课及选课系统、智慧学习系统、精品录播教室方案等,以支持个性化学习和教学评估。 建设内容突出了智慧安全和智慧管理的重要性。智慧安全管理通过分布式录播系统和紧急预案一键启动功能,增强校园安全预警和事件响应能力。智慧管理系统则利用物联网技术,实现人员和设备的智能管理,提高校园运营效率。 智慧教学部分,方案提供了智慧学习系统和精品录播教室方案,支持专业级学习硬件和智能化网络管理,促进个性化学习和教学资源的高效利用。同时,教学质量评估中心和资源应用平台的建设,旨在提升教学评估的科学性和教育资源的共享性。 智慧环境建设则侧重于基于物联网的设备管理,通过智慧教室管理系统实现教室环境的智能控制和能效管理,打造绿色、节能的校园环境。电子班牌和校园信息发布系统的建设,将作为智慧校园的核心和入口,提供教务、一卡通、图书馆等系统的集成信息。 总体而言,智慧校园整体解决方案通过集成先进技术,不仅提升了校园的信息化水平,而且优化了教学和管理流程,为学生、教师和家长提供了更加便捷、个性化的教育体验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值