先扯几句别的
执行运行时安全性检查
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
分享到:
相关推荐
因为使用的是当前登录用户权限使用SDK进行数据的读取和修改,所以插件功能完全不受影响。 数据的编辑、修改、停用、激活和删除都是当前登录人员有权限下才能使用。 注:配置的管理员账号和数据库连接字符串只是在...
10.2.3 理解和使用自定义权限 10.2.4 理解和使用URI权限 10.3 参考资料 10.4 小结 第11章 构建和使用服务 11.1 使用HTTP服务 11.1.1 将HttpClient用于HTTPGET请求 11.1.2 将HttpClient用于...
1.1 Android的发展和历史 2 1.1.1 Android的发展和简介 2 1.1.2 Android平台架构及特性 3 1.2 搭建Android开发环境 5 1.2.1 下载和安装Android SDK 5 1.2.2 安装Eclipse和ADT插件 7 1.3 Android常用...
10.2.3 理解和使用自定义权限 10.2.4 理解和使用URI权限 10.3 参考资料 10.4 小结 第11章 构建和使用服务 11.1 使用HTTP服务 11.1.1 将HttpClient用于HTTPGET请求 11.1.2 将HttpClient用于...
的 Android SDK 提供了在 Android 平台上使用 JaVa 语言进行 Android 应用开发必须的工具和 API 接口。 特性 • 应用程序框架 支持组件的重用与替换 • Dalvik Dalvik Dalvik Dalvik 虚拟机 专为移动设备优化 • ...
1.1 Android的发展和历史 2 1.1.1 Android的发展和简介 2 1.1.2 Android平台架构及特性 3 1.2 搭建Android开发环境 5 1.2.1 下载和安装Android SDK 5 1.2.2 安装Eclipse和ADT插件 7 1.3 Android常用开发工具的用法 ...
1.1 Android的发展和历史 2 1.1.1 Android的发展和简介 2 1.1.2 Android平台架构及特性 3 1.2 搭建Android开发环境 5 1.2.1 下载和安装Android SDK 5 1.2.2 安装Eclipse和ADT插件 7 1.3 Android常用开发工具的用法 ...
SELinux SEAndroid. 开头包含 Android11 添加自定义su进程的权限报错,解决实例。
它允许用户通过应用程序和呼叫来编辑,删除,添加联系人,消息功能具有呼叫电话的默认功能,并显示特定号码的用户呼叫日志。 使用的图书馆 牛油刀 毕加索 PermissionDispatcher(用于请求权限) hdodenhof / ...
具有语法突出显示和提示的 可自定义文本编辑器,能够查看源Java代码,并能够导入自己的代码突出显示主题。 具有许多功能的 便捷文件管理器。 使用各种类型的安装文件-* .apk,* .apks,* .xapk,* .apkm。 反分裂 ...
- 班级调查:作为学生和课堂评估的一部分,老师可以开展即时调查,估量学生的认识和理解。学生能够实时回答所提出的调查问题,教师随后可以向整个班级显示结果,让学生得到关于他们的进展的即时反馈。 - 锁屏:教师...
易于使用和清洁的用户界面。 基于自定义时间或您所在位置的太阳时间+时间偏移的主题切换。 桌面墙纸开关。 Windows .Theme-File开关,也可以更改重音颜色和鼠标光标。 办公主题开关 您可以选择是否仅应更改应用程序...
更改自定义开机画面,更换丰富的字体,添加手势操作,删除系统自带的软件,随意旋转屏幕,都需要获取最高ROOT权限。 3、ROOT后没有保修怎么办? 可以通过刷机解除ROOT状态——线刷官方ROM会自动恢复出厂状态,...
2个目标文件,FTP的目标是:(1)提高文件的共享性(计算机程序和/或数据),(2)鼓励间接地(通过程序)使用远程计算机,(3)保护用户因主机之间的文件存储系统导致的变化,(4)为了可靠和高效地传输,虽然用户...
2个目标文件,FTP的目标是:(1)提高文件的共享性(计算机程序和/或数据),(2)鼓励间接地(通过程序)使用远程计算机,(3)保护用户因主机之间的文件存储系统导致的变化,(4)为了可靠和高效地传输,虽然用户...