`
byandby
  • 浏览: 1697754 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

android 理解和使用自定义权限

阅读更多
   先扯几句别的
执行运行时安全性检查
    Android中的运行时安全性检查是在进程级别和操作级别上进行的。在进程级别,Android禁止一个应用程序直接访问另一个应用程序的数据。实现方法是,每个应用程序都在不同的进程中运行,使用唯一且固定的ID。在操作级别上,Android定义了一组受保护的功能和资源。要使用应用程序能够访问此信息,必须向  AndroidManifest.xml 文件添加一个或多个权限请求。也可以为应用程序定义自定义权限。

进程边界上的安全性
      在桌面环境中,大部分应用程序都使用相同的用户ID 运行,与此不同的是,Android应用程序通常使用自己的唯一ID运行。通过使用不同的ID 运行每个应用程序,Android围绕每个进程创建了一种隔离边界。这能够阻止一个应用程序直接访问另一个应用程序。
尽管每个进程都具有边界,但应用程序之间的数据共享显然也可以实现,但必须显示地进行共享。换句话说,要获得另一个应用程序的数据,必须借助该应用程序的组件。例如,可以查询另一应用程序的ContentProvider, 可以调用另一个应用程序中的活动,或者可以与另一个应用程序的服务通信。所有这些途径都提供了在应用程序之间共享信息的方法,但它们显式方式实现此目的,因为你不会访问基础数据库、文件等内容。

下面我们来 使用自定义权限
     Android支持为应用程序定义自定义权限。例如,如果希望阻止某些用户启动应用程序中的某个活动(也就是某个Activity),可以定义自定义权限来实现,要使用自定义权限,首先在AndroidManifest.xml 文件中声明它们。定义了权限之后,可以将它们作为组件定义的一部分进行引用。
     创建一个应用程序,其中包含一个不是所有人都允许启动的活动。要启动该活动,用户必须具有特定的权限,我们新建一个Android项目 输入 CustomPermission作为项目名称,输入 com.cust.perm最为包名称,输入 CustPermMainActivity作为活动名称 我们还得创建一个具有特殊权限才能访问的 Activity 名字是 PrivActivity,下面使我们的 PrivActivity类。
package com.cust.perm;

import android.app.Activity;
import android.os.Bundle;
import android.view.ViewGroup.LayoutParams;
import android.widget.LinearLayout;
import android.widget.TextView;

public class PrivActivity 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 PrivActivity");
		view.addView(nameLbl);
		setContentView(view);
	}

}


      这是一个灰常正常的Activity,我们要展示的是如果使用权限保护此activity,然后我们从客户端调用它,如果调用成功 我们就会在屏幕上看到 我们定义的文本 “Hello from PrivActivity”  下面我们来给这个activity 创建权限,灰常简单了,找到我们的AndroidManifest.xml文件 点击Permissions 然后 Add  来张图。



    图一看大家就明白了 权限具有 名称、标签、图标、权限组、描述和保护级别 这些属性。
    这个就不都解释了,挑2个解释,大家可以去看看文档,虽然我也看不懂。
android:name  必须有   权限的名称。通常应该尊选Android的命名方案 (*.permission.*)
android:protectionLevel  必须有 定义权限的风险级别,必须是以下值之一:
notmal、 dangerous、signature、signatureOrSystem  normal表示权限是低风险的,不会对系统、用户或其他应用程序造成危害。

   现在已经有了自定义权限。接下来需要告诉系统,PrivActivity 活动应该仅由具有 syh.permission.STARTMYACTIVITY 权限的应用程序启动。要在活动上设置必需的权限,可以将 android:permission 特性添加到 AndroidManifest.xml中的活动定义中。为了能启动活动,还需要想activity 添加一个Intent过滤器,下面是我们的 AndroidManifest.xml文件。
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
	package="com.cust.perm" android:versionCode="1"
	android:versionName="1.0">
	<application android:icon="@drawable/icon"
		android:label="@string/app_name">
		<activity android:name=".CustPermMainActivity"
			android:label="@string/app_name">
			<intent-filter>
				<action android:name="android.intent.action.MAIN" />
				<category
					android:name="android.intent.category.LAUNCHER" />
			</intent-filter>
		</activity>
		<activity android:name="PrivActivity"
			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>
	<uses-sdk android:minSdkVersion="9" />
	<permission android:description="@string/startMyActivityDesc"
		android:label="Start My Activity"
		android:name="syh.permission.STARTMYACTIVITY"
		android:protectionLevel="normal">
	</permission>
</manifest>


   我们的权限描述属性 android:description 引用了字符串资源 所以我们还得向 strings.xml添加一个字符串常量,如下:
 <string name="startMyActivityDesc">Allow starting my activity</string>


  好了我们现在来编写客户端,我们将在客户端中 访问刚才我们定义的具有特殊权限才能访问的Activity。新建项目 ClientOfCustomPermission  我们定义了一个按钮,当我们点击按钮就会访问那个具有特殊权限才能访问的 activity,下面是我们客户端的布局文件。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
<Button
	android:id="@+id/btn"
	android:text="Lauch PrivActivity"
	android:layout_width="wrap_content"
	android:layout_height="wrap_content"
	/>
</LinearLayout>


运行效果





  下面来看看我们的 ClientCustPermMainActivity类, 也没有什么特别的 就是我们需要在客户端的 AndroidManifest.xml文件中声明我们的访问权限 如下。
package com.client.cust.perm;

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;

public class ClientCustPermMainActivity extends Activity {

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		Button btn = (Button) findViewById(R.id.btn);
		btn.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				Intent intent = new Intent();
				// 通过指定包名来启动我们想要启动的 Activity 注意第二个参数是完全限定包名
				intent.setClassName("com.cust.perm",
						"com.cust.perm.PrivActivity");
				startActivity(intent);
			}
		});
	}
}


      我们添加了 uses-permission 项来请求自定义权限,具有该权限才能启动在 CustomPermission 项目中实现的 PrivActivity,然后我们运行 客户端,在这里 我要弱弱的提醒大家一下,由于我们是在 我们的客户端 去访问另外一个项目中的 具有特殊权限的activity,不是如访问服务 所以我们的另一个项目 也就是CustomPermission必须先运行,然后再运行我们的客户端,不然 是访问不了滴。

     源码已上传
  • 大小: 76.7 KB
  • 大小: 8.9 KB
  • 大小: 8.1 KB
  • CustomPermission.rar (40.5 KB)
  • 描述: 此项目包含需要特殊权限才能访问的Activity
  • 下载次数: 177
9
16
分享到:
评论
4 楼 梁家大丫头 2016-07-18  
写的还不错,不过不是我需要的。
3 楼 chy555chy 2015-09-11  
踩的原因是关于权限的很多地方都没写清楚
2 楼 337240552 2012-05-28  
为什么要踩呢 踩的人怎么不写几个。。。
1 楼 avi9111 2011-06-16  
写的好,还有代码,顶下你

相关推荐

    Android自定义权限的使用

    在Android系统中,权限管理是应用安全的重要组成部分。Android自定义权限允许...理解并正确使用自定义权限是每个Android开发者必备的技能。通过深入学习和实践,你可以更好地掌握这一技术,并将其应用于你的项目中。

    Android 中“自定义权限”源代码

    ### Android中的自定义权限详解与实现 #### 一、引言 在Android系统中,为了保护用户隐私和数据安全,应用程序被赋予了基于权限的安全...理解并掌握自定义权限的使用,对于开发出更加安全、可靠的应用具有重要意义。

    Android自定义权限permission

    本实例将深入探讨如何在Android中创建和使用自定义权限,这对于理解Android的安全模型至关重要。 一、Android权限基础 在Android中,权限分为两种类型:普通权限(Normal Permissions)和危险权限(Dangerous ...

    自定义权限学习(Perssion)

    在Android系统中,权限管理是保护应用程序数据和...通过学习和实践PermissionClient和PermissionMain项目,开发者可以更深入地理解自定义权限的创建、使用和管理,从而更好地设计和实现功能,同时尊重用户的隐私权。

    android 自定义Permission

    在Android系统中,权限管理是保障应用安全性和用户隐私的重要机制。默认情况下,Android提供了许多预定义的权限,如访问互联网、读写联系人等...在实际开发中,务必遵循最佳实践,确保权限的合理使用和用户隐私的保护。

    Android音频剪辑裁剪自定义view

    在Android开发中,实现音频剪辑和裁剪功能通常涉及到多媒体处理、自定义视图以及用户交互设计。本文将深入探讨如何创建一个Android音频剪辑裁剪的自定义View,以便用户可以通过拖动来调整音频的剪切时长,并通过滑块...

    android SDK中添加自定义api

    本文将详细介绍如何在Android SDK中添加自定义API,并通过具体的示例来阐述其步骤和注意事项。 首先,我们来看Java API的设计。在Android SDK中,自定义API通常以Java类或接口的形式存在,它们提供了开发者可以调用...

    Android自定义权限

    在Android系统中,权限管理是保障应用程序安全性和用户隐私的关键机制。默认情况下,Android提供了大量预定义的权限,如访问互联网...理解和熟练掌握自定义权限的使用,能帮助开发者创建更安全、更可控的Android应用。

    Android应用源码之自定义弹出窗口的实现

    在Android应用开发中,自定义弹出...通过学习和实践这个项目,开发者可以深入理解Android自定义弹出窗口的实现原理,提升应用程序的交互性和用户体验。同时,对于Android应用的项目结构和资源管理也会有更清晰的认识。

    Android 自定义View视图

    本文将深入探讨如何通过继承View类来实现一个自定义的罗盘界面,以帮助开发者理解自定义视图的工作原理。 首先,自定义View的基本步骤包括: 1. **创建新类**:为了创建自定义View,我们需要创建一个新的Java类,...

    自定义权限demo

    通过阅读源代码和运行示例,你可以更深入地理解自定义权限的使用方式和应用场景。 总之,自定义权限是Android开发中的一个重要环节,它允许开发者根据应用的具体需求设置权限控制,增强应用的安全性。理解并熟练...

    Android权限控制之自定义权限

    本篇将深入探讨如何在Android中实现自定义权限,并通过两个示例应用——Permission App 和 Client App——来演示整个过程。 首先,我们来看Permission App的设置。在这个应用中,我们的目标是定义一个新的权限。这...

    Android-Android自定义相机

    总之,Android自定义相机的实现涉及对Camera API的理解和使用,或者采用CameraX库简化开发过程。无论选择哪种方式,都需要充分考虑性能、用户体验和兼容性,以创建出功能丰富、稳定可靠的相机应用。在实际开发中,...

    android自定义相机带取景框

    在Android开发中,自定义相机是一项常见的需求,它允许开发者根据特定的应用场景和用户体验来定制相机功能。"android自定义相机带取景框"这个话题就是关于如何在Android应用中创建一个具有用户界面元素(如取景框)...

    android 使用GLsurfaceView 自定义相机

    自定义相机需要申请`&lt;uses-feature android:name="android.hardware.camera" /&gt;`和`&lt;uses-permission android:name="android.permission.CAMERA" /&gt;`权限。确保在`AndroidManifest.xml`中声明这些权限。 3. **创建...

    android,相册选择图片,自定义,裁剪

    总结起来,"android,相册选择图片,自定义,裁剪"这个主题涵盖了Android权限管理、Intent使用、图片选择、自定义裁剪实现和图片保存等多个重要知识点。开发者需要理解并掌握这些技术,才能在实际项目中实现用户友好...

Global site tag (gtag.js) - Google Analytics