Android Notesの権限管理


私のGitPageブログ
前言
本文は主にAndroidにおける権限の管理について述べる.ここではまず三つpermission1.uses-permission:アプリケーションが持つ権限、例えばandroid.permission.INTERNET2.permission:あるアプリのうちの1つのサービスまたは1つのActivityが権限を持たないアプリの起動を許可しない場合、そのサービスまたはActivityに権限3を設定できるように開発者がカスタマイズした権限.android:permission:ActivityまたはServiceのための権限です
権限の追加
コードに権限チェックを追加
コードで呼び出すcontext.checkCallingOrSelfPermission(SAY_HELLO_PERMISSION)パーミッションをチェックし、戻り値は2種類あるPackageManager.PERMISSION_GRANTEDPackageManager.PERMISSION_DENYで、前者はパーミッションを備えていることを示し、後者は逆である.権限がある場合にのみ呼び出すことができるsayHelloメソッド.
public static final String SAY_HELLO_PERMISSION="com.android.tongs.checkpermissionincode.permission.SAY_HELLO_PERMISSION";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        findViewById(R.id.startMyAty).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                startActivity(new Intent(MainActivity.this,MyAty.class));
            }
        });
        sayHello(this);
    }


    public void sayHello(Context context){
        int checkResult = context.checkCallingOrSelfPermission(SAY_HELLO_PERMISSION);
        if(checkResult!= PackageManager.PERMISSION_GRANTED){
            throw new SecurityException("   sayHello  ");
        }
        System.out.println("Hello");
    }

このときAndroidManifestファイルに権限を宣言し、宣言しないと投げ出すSecurityException異常です.
<!--             -->
<permission android:name="com.android.tongs.checkpermissionincode.permission.SAY_HELLO_PERMISSION" />
<!--    APP      -->
<uses-permission android:name="com.android.tongs.checkpermissionincode.permission.SAY_HELLO_PERMISSION" />

AppのActivityに権限を追加
Activityへのアクセス権の追加
<activity android:name=".MyAty" android:permission="com.android.tongs.checkpermissionincode.permission.Start_MyAty">
    <intent-filter>
        <category android:name="android.intent.category.DEFAULT"/>
        <action android:name="com.android.tongs.checkpermissionincode.intent.action.MyAty"/>
    </intent-filter>
</activity>
AndroidManifestこのカスタム権限をファイルに宣言
<permission android:name="com.android.tongs.checkpermissionincode.permission.Start_MyAty" />

この権限は、別のAppで宣言する必要があります.
<!--    ,      App  MyAty-->
<uses-permission android:name="com.android.tongs.checkpermissionincode.permission.Start_MyAty"/>

最後に別のAppでMyAtyを起動する方法は、次のとおりです.
startActivity(new Intent("com.android.tongs.checkpermissionincode.intent.action.MyAty"));

くぼみ
あるアプリケーションで別のアプリケーションのActivityを起動する別の方法である、構成Intent-Filter、デフォルトcategory、追加actioncom.android.tongs.checkpermissionincode.intent.action.MyAtyである.パッケージ名+intent+action+クラス名でなければなりません.そうしないと、このactionは見つかりません.
まとめ
  • 権限をよりよく管理するために、同じプログラム間の方法でも権限を設定する場合がありますが、その場合は権限をカスタマイズして、AndroidManifestファイルに宣言します.
  • 同じAppでサービスを起動したり、Activityで権限を必要としない場合は、Activityを変更する権限を設定してもアクセスできます.
  • 異なるApp間でActivityに権限を設定し、他のAppがアクセスしたい場合は権限を宣言する必要があります.