Android自定义权限的使用
执行运行时安全性检查
Android中的运行时安全性检查是在进程级别和操作级别上进行的。在进程级别,Android禁止一个应用程序直接访问另一个应用程序的数据。实现方法是,每个应用程序都在不同的进程中运行,使用唯一且固定的ID。在操作级别上,Android定义了一组受保护的功能和资源。要使用应用程序能够访问此信息,必须向 AndroidManifest.xml 文件添加一个或多个权限请求。也可以为应用程序定义自定义权限。
进程边界上的安全性
在桌面环境中,大部分应用程序都使用相同的用户ID 运行,与此不同的是,Android应用程序通常使用自己的唯一ID运行。通过使用不同的ID 运行每个应用程序,Android围绕每个进程创建了一种隔离边界。这能够阻止一个应用程序直接访问另一个应用程序。
尽管每个进程都具有边界,但应用程序之间的数据共享显然也可以实现,但必须显示地进行共享。换句话说,要获得另一个应用程序的数据,必须借助该应用程序的组件。例如,可以查询另一应用程序的ContentProvider, 可以调用另一个应用程序中的活动,或者可以与另一个应用程序的服务通信。所有这些途径都提供了在应用程序之间共享信息的方法,但它们显式方式实现此目的,因为你不会访问基础数据库、文件等内容。
下面我们来 使用自定义权限
Android支持为应用程序定义自定义权限。例如,如果希望阻止某些用户启动应用程序中的某个活动(也就是某个Activity),可以定义自定义权限来实现,要使用自定义权限,首先在AndroidManifest.xml 文件中声明它们。定义了权限之后,可以将它们作为组件定义的一部分进行引用。
创建一个应用程序,其中包含一个不是所有人都允许启动的活动。要启动该活动,用户必须具有特定的权限,我们新建一个Android项目 输入 AndroidPermission作为项目名称,我们还得创建一个具有特殊权限才能访问的 Activity 名字是 MainActivity ,下面使我们的 MainActivity 类
package com.example.androidpermission; import android.app.Activity; import android.os.Bundle; import android.view.ViewGroup.LayoutParams; import android.widget.Button; import android.widget.LinearLayout; import android.widget.TextView; /** * android自定义权限的实现 * @author miaowei * */ public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); LinearLayout view = new LinearLayout(this); view.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT)); view.setOrientation(LinearLayout.HORIZONTAL); TextView nameLbl = new TextView(this); nameLbl.setText("Hello from android自定义权限的实现"); view.addView(nameLbl); setContentView(view); } }
下面我们来给这个activity 创建权限,找到我们的AndroidManifest.xml文件 点击Permissions 然后 Add
权限具有名称、标签、图标、权限组、描述和保护级别,以下表格定义了这些属性:
特性 | 是否必需 |
说明 |
android:name | √ | 权限的名称,通常应遵循android 命名方案(*.permission.*) |
android:protectionLevel | √ |
定义与权限相关的"风险级别"。必须是以下值之一: normal, dangerous, signature, signatureOrSystem , 取决于保护级别,在确定是否授予权限时,系统可能采取不同的操作。 normal 表示权限是低风险的,不会对系统、用户或其他应用程序造成危害; dangerous 表示权限是高风险的,系统将可能要求用户输入相关信息,才会授予此权限; signature 表示只有当应用程序所用数字签名与声明引权限的应用程序所用数字签名相同时, 才能将权限授给它;signatureOrSystem 表示将权限授给具有相同数字签名的应用程序或android 包类。 这一保护级别适和于非常特殊的情况,比如多个供应商需要通过系统映像共享功能时 |
android:permissionGroup | × |
可以将权限放在一个组中,但对于自定期义权限,应该避免设置此属性。如果确实希望设置此属性, 可能使用以下属性代替:android.permisson-group.SYSTEM_TOOLS |
android:label | × | 可使用它对权限进行简短描述 |
android:description | × | 使用它提供对权限用途和所保护对象的更有用的描述 |
android:icon | × | 权限可以与资源目录以外的图标相关联 ( 比如@drawable/myicon) |
<string name = "startMyActivityDes">启动Activity</string>
二、 理解与使用自定义权限
现在已经有了自定义权限。接下来需要告诉系统,MainActivity 活动应该仅由具有 syh.permission.STARTMYACTIVITY 权限的应用程序启动。要在活动上设置必需的权限,可以将 android:permission 特性添加到 AndroidManifest.xml中的活动定义中。为了能启动活动,还需要想activity 添加一个Intent过滤器,下面是我们的 AndroidManifest.xml文件。
<permission android:name="syh.permission.STARTMYACTIVITY" android:label="Start My Activity" android:description="@string/startMyActivityDes" android:protectionLevel="normal"></permission> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name=".MainActivity" android:label="@string/app_name" android:permission="syh.permission.STARTMYACTIVITY"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application>
好了我们现在来编写客户端,我们将在客户端中 访问刚才我们定义的具有特殊权限才能访问的Activity。新建项目 ClientOfCustomPermission 我们定义了一个按钮,当我们点击按钮就会访问那个具有特殊权限才能访问的 activity
package com.example.androidpermissioncustom; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; /** * 调用具有自定义权限的应用 * @author miaowei * */ 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.btn); button.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(); // 通过指定包名来启动我们想要启动的 Activity 注意第二个参数是完全限定包名 intent.setClassName("com.example.androidpermission","com.example.androidpermission.MainActivity"); startActivity(intent); } }); } }
另外在客户端的AndroidManifest.xml 中要加上一句:
<uses-permission android:name="syh.permission.STARTMYACTIVITY" /> ,有了该权限才能启动在上一个程序实现的MainActivity
我们添加了 uses-permission 项来请求自定义权限,具有该权限才能启动在 AndroidPermissionCustom项目中实现的MainActivity,然后我们运行 客户端,在这里提醒大家一下,由于是在 我们的客户端 去访问另外一个项目中的 具有特殊权限的activity,不是如访问服务 所以我们的另一个项目 也就是AndroidPermission必须先运行,然后再运行AndroidPermissionCustom,不然是访问不了的。
注意:自定义权限不仅仅用于Activity ,也可用于Service,BroadCastReceiver等类型
相关推荐
Android自定义权限使用总结 Android系统中,自定义权限是指应用程序可以声明和使用的权限,以便更好地控制应用程序之间的交互和访问。下面是关于Android自定义权限使用的总结。 1. 如何声明自定义权限 在Android...
本文将深入探讨如何理解和使用自定义权限,以便在Android应用开发中更好地进行权限管理。 首先,理解Android权限系统的基础。在Android中,权限分为两种类型:正常权限(Normal Permissions)和危险权限(Dangerous...
该资源包含了一个android自定义的权限,包含两个工程security和securitytest,其中,security声明自定义的权限,在securitytest中利用这些自定义的权限,包含了自定义的activity,service,contentprovider,发送和...
本实例将深入探讨如何在Android中创建和使用自定义权限,这对于理解Android的安全模型至关重要。 一、Android权限基础 在Android中,权限分为两种类型:普通权限(Normal Permissions)和危险权限(Dangerous ...
"android自定义相机带取景框"这个话题就是关于如何在Android应用中创建一个具有用户界面元素(如取景框)的自定义相机组件。下面将详细介绍这个过程中的关键知识点。 一、开启相机权限 在AndroidManifest.xml文件中...
综上所述,创建一个Android自定义相机身份证扫描界面涉及多个步骤,包括权限管理、相机API的使用、自定义布局设计、手势识别、图像处理等技术。通过对这些知识点的掌握和实践,你可以为用户提供一个高效且准确的...
本教程将深入探讨如何在Android中实现自定义权限,并通过两个项目实例——PermissionClient和PermissionMain——进行实践讲解。 1. **自定义权限定义** 在AndroidManifest.xml文件中,开发者可以声明自定义权限,...
android自定义拍照界面,这是一个圆形的界面,别人资源库里复制过来的,自测可以使用,还有因为 targetSdkVersion=22所以是自动加权限,如果是23+则需要手动添加拍照和读取文件夹权限了
本文将深入探讨Android自定义权限的相关知识点。 首先,创建自定义权限需要在应用的`AndroidManifest.xml`文件中定义。权限声明以`<permission>`标签开始,包括`android:name`、`android:protectionLevel`和`...
本文将深入探讨Android中自定义权限的定义、使用及其背后的源代码实现。 #### 二、自定义权限的定义 自定义权限是指开发者可以在自己的应用中定义特定的权限,这些权限可以用于限制应用内部的某个功能或服务的访问...
在Android应用开发中,自定义View视图是一个重要的技术,它允许开发者根据特定需求创建独一无二的用户界面元素。本文将深入探讨如何通过继承View类来实现一个自定义的罗盘界面,以帮助开发者理解自定义视图的工作...
在Android项目的`AndroidManifest.xml`文件中,使用`<permission>`标签声明自定义权限。例如: ```xml <permission android:name="com.example.MY_PERMISSION" android:protectionLevel="signature"/> ``` 其中...
这个“Android自定义弹出框实现(修改版)完整实例源码”就是一个很好的示例,它展示了如何根据自己的需求设计和构建个性化的弹出框。下面将详细介绍这个实例中的关键知识点。 首先,我们要理解Android中的弹出框...
在AndroidManifest.xml文件中,需要声明自定义键盘服务,并设置相应的权限和属性。 ```xml android:name=".CustomKeyboardService" android:label="@string/app_name" android:permission="android.permission....
在Android开发中,自定义Launcher是一项常见的需求,它允许开发者创建独特的用户界面,提供与原生...通过分析和修改`ScrollLayoutGrid_v3`,可以深入了解Android自定义视图的实现,同时也可以提升解决实际问题的能力。