`

android 自定义权限 permission

 
阅读更多

本文出自:http://blog.csdn.net/zhongnan09/article/details/6552644

Android支持为应用程序自定义权限。如果希望自己的程序组件(如Activity,BroacastReceiver)等被任意用户随意启动执行。要使用自定义权限,首先在AndroidManifest.xml文件中声明它们,定义了权限之后,可以将它作为组件定义的一部分进行引用。

下面列举一个demo,详述自定义权限的过程:

首先创建一个工程CustomMadePermisson:

主Activity(启动Activity):

import android.app.Activity;

import android.os.Bundle;

import android.view.ViewGroup.LayoutParams;

import android.widget.LinearLayout;

import android.widget.TextView;

public class MainActivity extends Activity {

/** Called when the activity is first created. */

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

LinearLayout layout = new LinearLayout(this);

layout.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,

LayoutParams.WRAP_CONTENT));

layout.setOrientation(LinearLayout.HORIZONTAL);

TextView textView = new TextView(this);

textView.setText("欢迎来到徐志奇的博客!");

layout.addView(textView);

setContentView(layout);

}

}

新建另外一个Activity,名称为Another,该Activity只是一个空Activity,用来验证添加启动权限后的启动效果:

import android.app.Activity;

import android.os.Bundle;

import android.widget.Toast;

public class Another extends Activity {

/** Called when the activity is first created. */

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

Toast.makeText(this,"欢迎来到新的界面",Toast.LENGTH_LONG).show();

}

}

添加权限:

双击AndroidManifest.xml文件,打开permissions选项卡,在Permissions窗口中单击Add按钮,选择Permission,然后单击ok按钮,添加一个新的Permission:

权限的特性:

Android:name

权限的名称,必填属性,通常应该遵循Android的命名方案(*.permission.*)但非必须。

android:protectionLevel

定义与权限相关的保护级别,必填属性。必须选择一下四项之一:normal、dangerous、signature、signatureOrSystem。

android:permissionGroup

非必填属性,可以将权限放在一个组中,但对于自定义权限,尽量不要设置此属性了。

android:label

非必填属性,含义你应该明白。

android:description

非必填属性,含义你应该明白。

android:icon

非必填属性,含义你应该明白。

现在已经定义好了权限,接下来就是设置启动Activity的权限了。要在活动上设置权限,可以将android:permission特性添加到AndroidManifest.xml文件中:

AndroidManifest.xml文件:

<?xml version="1.0" encoding="utf-8"?>

<manifest xmlns:android="http://schemas.android.com/apk/res/android"

package="com.xzq.custompermission" android:versionCode="1"

android:versionName="1.0">

<uses-sdk android:minSdkVersion="8" />

<permission android:protectionLevel="normal"

android:name="com.xzq.permission.zhongnantest"></permission>

<application android:icon="@drawable/icon" android:label="@string/app_name">

<activity android:name=".MainActivity" 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=".Another" android:label="@string/app_name"

android:permission="com.xzq.permission.zhongnantest">

<intent-filter>

<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />

</intent-filter>

</activity>

</application>

</manifest>

新建测试工程Clint:

在该工程中创建一个Activity,用来测试上面添加了启动权限的Activity的启动情况。

import android.app.Activity;

import android.content.Intent;

import android.os.Bundle;

import android.view.View;

import android.widget.Button;

public class MainActivity extends Activity {

/** Called when the activity is first created. */

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

((Button) findViewById(R.id.button1))

.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

Intent intent = new Intent();

intent.setClassName("com.xzq.custompermission",

"com.xzq.custompermission.Another");

startActivity(intent);

}

});

}

}

界面布局:

<?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">

<TextView android:layout_width="fill_parent"

android:layout_height="wrap_content" android:text="@string/hello" />

<Button android:text="启动新Activity" android:id="@+id/button1"

android:layout_width="wrap_content" android:layout_height="wrap_content"></Button>

</LinearLayout>

AndroidManifest.xml文件:

<?xml version="1.0" encoding="utf-8"?>

<manifest xmlns:android="http://schemas.android.com/apk/res/android"

package="com.xzq.client" android:versionCode="1" android:versionName="1.0">

<uses-sdk android:minSdkVersion="8" />

<uses-permission android:name="com.xzq.permission.zhongnantest" />

<application android:icon="@drawable/icon" android:label="@string/app_name">

<activity android:name=".MainActivity" android:label="@string/app_name">

<intent-filter>

<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />

</intent-filter>

</activity>

</application>

</manifest>

重点是在该文件中添加了相应的权限,才可以启动上面的界面。

自定义权限不仅适用于活动,实际上,也可以同样应用于Android中的其他类型的组件
分享到:
评论

相关推荐

    Android自定义权限permission

    一个Android自定义权限permission的实例,帮助初学者了解如何自定义访问权限。

    android 自定义Permission

    实现android中自定义的Permission

    Android权限控制之自定义权限

    天哪,这篇文章终于说道如何自定义权限了,左盼右盼,其实这个自定义权限相当easy。为了方便叙述,我这边会用到两个app作为例子示范。 Permission App: used to define a new permission 这个作为定义权限的App,我...

    详解Android自定义权限使用总结

    1、如何声明自定义权限 在Manifest文件中使用Permission标签定义自己的权限: &lt;?xml version=1.0 encoding=utf-8?&gt; &lt;manifest xmlns:android=http://schemas.android.com/apk/res/android package=...

    Android6.0后权限封装配置

    Android6.0自定义权限配置,封装,使用简单

    Android代码-AndroidPermission6.0

    //自定义权限字符 public static final String CAMERA = Manifest.permission.CAMERA; public static final String CALL = Manifest.permission.CALL_PHONE; public static final String WRITE = Manifest....

    Android中Permission权限机制的具体使用

    主要介绍了Android中Permission权限机制的具体使用,本文讲解了权限级别 protection level、ICC(inter-component communication)权限保护等内容,需要的朋友可以参考下

    自定义统计SDKTcStatInterface.zip

    &lt;uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /&gt;对应的5种权限,用途如下:网络访问权限,需要联网以便于向小米统计服务端上报统计数据。 查看网络状态,用于根据不同的网络环境,...

    Android代码-Android-FloatWindow

    Android自定义悬浮窗 原理很简单,就是借用了WindowManager这个管理类来实现的。 1.首先在AndroidManifest.xml中添加使用权限: uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" 2.二行...

    Android代码-AndroidAcp

    Acp 为 Android check permission 缩写,此库简化Android 6.0 系统复杂的权限操作而编写。 特点 支持批量权限申请,不需要重写 onRequestPermissionsResult 方法,Activity 与 Fragment 中用法一致,一句话搞定。 ...

    Android自定义webView头部进度加载效果

    不多说先来看下效果图: 1. 颜色渐变加载进度条(夜神模拟器)   绿色加载进度条(魅蓝note2)   看图说话: 上图是不是加载网页的时候会有一个进度条在...uses-permission android:name=android.permission.INTERNET

    Android自定义图片选择器简单版

    前言:图片选择器基本上是每个App必备的东西,用公认好的...步骤1:动态申请权限 private boolean permissionOpen() { if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) !=

    Android6.0权限问题解决

    ● Acp 为 Android check permission 缩写,此库简化Android 6.0 系统复杂的权限操作而编写。 特点 ● 支持批量权限申请,不需要重写 onRequestPermissionsResult 方法,Activity 与 Fragment 中用法一致,一句话...

    Android自定义 WebView浏览器

    WebView是Android中一个非常实用的组件,它和Safai、Chrome一样都是基于...添加访问网络的权限android.permission.INTERNET 调用WebView对象的getSettings()方法,获取到WebSettings设置对象 调用WebSettings对象的se

    Android自定义APP全局悬浮按钮

    原本想通过framelayout实现一个悬浮在其他控件上的按钮,但是... &lt;uses android:name=android.permission.SYSTEM_ALERT_WINDOW&gt; &lt;uses android:name=android.permission.WRITE_SETTINGS/&gt; 二、通过application获取到

    Android studio 实现手机扫描二维码功能

    &lt;uses android:name=android.permission.CAMERA&gt; &lt;uses android:name=android.permission.FLASHLIGHT&gt; 2.添加依赖 implementation 'cn.yipianfengye.android:zxing-library:2.2' 3.activity_main.xml &lt;?xml ...

    Android实现自定义手势和识别手势的功能

    &lt;uses android:name=android.permission.READ_EXTERNAL_STORAGE&gt; //读取SD卡权限 &lt;uses android:name=android.permission.WRITE_EXTERNAL_STORAGE&gt; //写入SD卡权限 1.2 简单写一个布局文件,其中用到了...

    miui8基于Toast实现自定义窗口,接点击事件,不需要权限

    miui8基于Toast实现自定义窗口,接点击事件,不需要权限android.permission.SYSTEM_ALERT_WINDOW,Toast的点击事件支持4.4 以上,如果想兼容4.4一下,只需要将窗口类型改为TYPE_SYSTEM_ALERT,就可以了,这个事需要...

    Android添加用户组及自定义App权限的方法

    Android:4.4.4 一、应用场景 在Android设备上,现在我们外接了一个USB转串口的设备,设备节点是/dev/ttyUSB0: # ls -l /dev/ttyUSB0 crw-rw---- 1 root root 188, 0 /dev/ttyUSB0 信息显示:该设备的用户及其所属...

    自定义吐司(Toast)

    自定义吐司toast ★如果要弹出来 可以相应触摸点击...★ * 1.params.type 设置为可以相应触摸事件 * 2.修改窗体类型 电话优先级窗体类型TYPE_PRIORITY_PHONE * 3.设置权限 android.permission.SYSTEM_ALERT_WINDOW

Global site tag (gtag.js) - Google Analytics