Android自定义权限
??????? Android應(yīng)用程序可以自定義屬于自己的權(quán)限或者屬于開發(fā)者使用的同一個簽名的權(quán)限。自定義權(quán)限的步驟如下:
一、在AndroidManifest文件中,添加一個permission標(biāo)簽:
<permission android:description="string resource" android:icon="drawable resource" android:label="string resource" android:name="string" android:permissionGroup="string" android:protectionLevel=["normal" | "dangerous" | "signature" | "signatureOrSystem"] />android:name :權(quán)限的唯一標(biāo)識,一般使用包名+權(quán)限名;
android:permissionGroup: 權(quán)限所屬權(quán)限組的名稱;
android:protectionLevel: 權(quán)限的等級:
????????normal 是最低的等級,聲明此權(quán)限的app,系統(tǒng)會默認(rèn)授予此權(quán)限,不會提示用戶;
????????dangerous? 權(quán)限對應(yīng)的操作有安全風(fēng)險,系統(tǒng)在安裝聲明此類權(quán)限的app時會提示用戶;
????????signature? 權(quán)限表明的操作只針對使用同一個證書簽名的app開放;
????????signatureOrSystem? 與signature類似,只是增加了rom中自帶的app的聲明。
android:name 屬性是必須的,其他的可選,未寫的系統(tǒng)會指定默認(rèn)值。
二、具體使用范例:
1. 創(chuàng)建一個工程CustomPermission,新建兩個活動,主活動對應(yīng)的布局文件如下:
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity"><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="OneProject"android:textSize="12pt"android:gravity="center"android:layout_centerInParent="true" /><Buttonandroid:id="@+id/intent_button"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="Intent"android:textSize="10pt"android:layout_alignParentRight="true"android:layout_alignParentBottom="true"/> </RelativeLayout>2. 第二個活動對應(yīng)的布局文件如下:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:orientation="horizontal"android:layout_width="match_parent"android:layout_height="match_parent"><TextViewandroid:layout_width="match_parent"android:layout_height="wrap_content"android:text="添加權(quán)限才能看到我!!!"android:layout_gravity="center_vertical"android:gravity="center"android:textSize="12pt"/></LinearLayout>3. 在配置文件中自定義權(quán)限,并對第二個活動添加權(quán)限:
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.example.custompermission"><permissionandroid:name="com.example.custompermission.get2view"android:protectionLevel="signature"/><applicationandroid:allowBackup="true"android:icon="@mipmap/ic_launcher"android:label="@string/app_name"android:roundIcon="@mipmap/ic_launcher_round"android:supportsRtl="true"android:theme="@style/Theme.CustomPermission"><activityandroid:name=".MainActivity2"android:permission="com.example.custompermission.get2view"android:exported="true"><intent-filter><action android:name="com.example.custompermission.get2view" /><category android:name="android.intent.category.DEFAULT" /></intent-filter></activity><activityandroid:name=".MainActivity"android:exported="true"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity></application></manifest>4. 主活動代碼如下:
package com.example.custompermission;import androidx.appcompat.app.AppCompatActivity;import android.content.Intent; import android.os.Bundle; import android.view.View; import android.widget.Button;public class MainActivity extends AppCompatActivity {private Button button;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);button = (Button) findViewById(R.id.intent_button);button.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {Intent intent = new Intent();intent.setAction("com.example.custompermission.get2view");startActivity(intent);}});} }運(yùn)行工程CustomPermission:在主活動點(diǎn)擊INTENT按鈕,跳轉(zhuǎn)第二個活動可以正常跳轉(zhuǎn)。
??????
?結(jié)論:對于同一個工程,活動之間進(jìn)行跳轉(zhuǎn),即便不添加權(quán)限申請也可以。
5. 創(chuàng)建另一個工程UsePermission,主活動里放置一個按鈕,用于跳轉(zhuǎn)CustomPermission工程的第二個活動,對應(yīng)布局文件如下:
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity"><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="TwoProject"android:textSize="12pt"android:gravity="center"android:layout_centerInParent="true"/><Buttonandroid:id="@+id/intent_button"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="Intent"android:textSize="10pt"android:layout_alignParentRight="true"/></RelativeLayout>?6. 主活動代碼如下:
package com.example.usepermission;import androidx.appcompat.app.AppCompatActivity;import android.content.Intent; import android.os.Bundle; import android.view.View; import android.widget.Button;public class MainActivity extends AppCompatActivity {private Button button;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);button = (Button) findViewById(R.id.intent_button);button.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {Intent intent = new Intent();intent.setAction("com.example.custompermission.get2view");startActivity(intent);}});} }?(1)不在配置文件里申請?jiān)L問CustomPermission工程的第二個活動的權(quán)限,點(diǎn)擊跳轉(zhuǎn)按鈕Logcat窗口報錯:
java.lang.SecurityException: Permission Denial: starting Intent(2)在配置文件里申請?jiān)L問權(quán)限:
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.example.usepermission"><uses-permission android:name="com.example.custompermission.get2view"/><applicationandroid:allowBackup="true"android:icon="@mipmap/ic_launcher"android:label="@string/app_name"android:roundIcon="@mipmap/ic_launcher_round"android:supportsRtl="true"android:theme="@style/Theme.UsePermission"><activityandroid:name=".MainActivity"android:exported="true"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity></application></manifest>運(yùn)行程序,點(diǎn)擊跳轉(zhuǎn)按鈕的效果如下:
? ?
?
?
?
?
?
?
?
?
?
?
總結(jié)
以上是生活随笔為你收集整理的Android自定义权限的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: harmonyos电脑系统下载,harm
- 下一篇: Win7、Win10系统封装后GHO文件