Android自定义权限
??????? Android應用程序可以自定義屬于自己的權限或者屬于開發者使用的同一個簽名的權限。自定義權限的步驟如下:
一、在AndroidManifest文件中,添加一個permission標簽:
<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 :權限的唯一標識,一般使用包名+權限名;
android:permissionGroup: 權限所屬權限組的名稱;
android:protectionLevel: 權限的等級:
????????normal 是最低的等級,聲明此權限的app,系統會默認授予此權限,不會提示用戶;
????????dangerous? 權限對應的操作有安全風險,系統在安裝聲明此類權限的app時會提示用戶;
????????signature? 權限表明的操作只針對使用同一個證書簽名的app開放;
????????signatureOrSystem? 與signature類似,只是增加了rom中自帶的app的聲明。
android:name 屬性是必須的,其他的可選,未寫的系統會指定默認值。
二、具體使用范例:
1. 創建一個工程CustomPermission,新建兩個活動,主活動對應的布局文件如下:
<?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. 第二個活動對應的布局文件如下:
<?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="添加權限才能看到我!!!"android:layout_gravity="center_vertical"android:gravity="center"android:textSize="12pt"/></LinearLayout>3. 在配置文件中自定義權限,并對第二個活動添加權限:
<?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);}});} }運行工程CustomPermission:在主活動點擊INTENT按鈕,跳轉第二個活動可以正常跳轉。
??????
?結論:對于同一個工程,活動之間進行跳轉,即便不添加權限申請也可以。
5. 創建另一個工程UsePermission,主活動里放置一個按鈕,用于跳轉CustomPermission工程的第二個活動,對應布局文件如下:
<?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)不在配置文件里申請訪問CustomPermission工程的第二個活動的權限,點擊跳轉按鈕Logcat窗口報錯:
java.lang.SecurityException: Permission Denial: starting Intent(2)在配置文件里申請訪問權限:
<?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>運行程序,點擊跳轉按鈕的效果如下:
? ?
?
?
?
?
?
?
?
?
?
?
總結
以上是生活随笔為你收集整理的Android自定义权限的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: harmonyos电脑系统下载,harm
- 下一篇: android sina oauth2.