android 自定义权限 permission
Android支持为应用程序自定义权限。如果希望自己的程序组件(如Activity,BroacastReceiver)等被任意用户随意启动执行。要使用自定义权限,首先在AndroidManifest.xml文件中声明它们,定义了权限之后,可以将它作为组件定义的一部分进行引用。
下面列举一个demo,详述自定义权限的过程:
首先创建一个工程CustomMadePermisson:
主Activity(启动Activity):
importandroid.app.Activity;
importandroid.os.Bundle;
importandroid.view.ViewGroup.LayoutParams;
importandroid.widget.LinearLayout;
importandroid.widget.TextView;
publicclassMainActivityextendsActivity {
/** Called when the activity is first created. */
@Override
publicvoidonCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
LinearLayout layout =newLinearLayout(this);
layout.setLayoutParams(newLayoutParams(LayoutParams.FILL_PARENT,
LayoutParams.WRAP_CONTENT));
layout.setOrientation(LinearLayout.HORIZONTAL);
TextView textView =newTextView(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文件:
<?xmlversion="1.0"encoding="utf-8"?>
<manifestxmlns:android="http://schemas.android.com/apk/res/android"
package="com.xzq.custompermission"android:versionCode="1"
android:versionName="1.0">
<uses-sdkandroid:minSdkVersion="8"/>
<permissionandroid:protectionLevel="normal"
android:name="com.xzq.permission.zhongnantest"></permission>
<applicationandroid:icon="@drawable/icon"android:label="@string/app_name">
<activityandroid:name=".MainActivity"android:label="@string/app_name">
<intent-filter>
<actionandroid:name="android.intent.action.MAIN"/>
<categoryandroid:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
<activityandroid:name=".Another"android:label="@string/app_name"
android:permission="com.xzq.permission.zhongnantest">
<intent-filter>
<actionandroid:name="android.intent.action.MAIN"/>
<categoryandroid: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);
}
});
}
}
界面布局:
<?xmlversion="1.0"encoding="utf-8"?>
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"android:layout_width="fill_parent"
android:layout_height="fill_parent">
<TextViewandroid:layout_width="fill_parent"
android:layout_height="wrap_content"android:text="@string/hello"/>
<Buttonandroid:text="启动新Activity"android:id="@+id/button1"
android:layout_width="wrap_content"android:layout_height="wrap_content"></Button>
</LinearLayout>
AndroidManifest.xml文件:
<?xmlversion="1.0"encoding="utf-8"?>
<manifestxmlns:android="http://schemas.android.com/apk/res/android"
package="com.xzq.client"android:versionCode="1"android:versionName="1.0">
<uses-sdkandroid:minSdkVersion="8"/>
<uses-permissionandroid:name="com.xzq.permission.zhongnantest"/>
<applicationandroid:icon="@drawable/icon"android:label="@string/app_name">
<activityandroid:name=".MainActivity"android:label="@string/app_name">
<intent-filter>
<actionandroid:name="android.intent.action.MAIN"/>
<categoryandroid:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
</application>
</manifest>
重点是在该文件中添加了相应的权限,才可以启动上面的界面。
自定义权限不仅适用于活动,实际上,也可以同样应用于Android中的其他类型的组件。
更多相关文章
- Android(安卓)Studio 引入编写好的.so库
- 给 Android(安卓)开发者的 Flutter 指南(上)
- 基于 Android(安卓)NDK 的学习之旅-----Android.mk 介绍
- android 菜单导航 (Fragment + RadioGroup)
- Android(安卓)10适配注意的问题
- android 判断Apk是否签名和 签名是否一致
- 使用Android(安卓)Studio开发NDK程序时出现couldn't find "lib×
- Android如何通过shareduserid获取系统权限
- Jenkins+Ant+Android+Robitium 实例详解(打包app,执行Robotium测试