アプリの権限を宣言する

権限を使用するためのワークフローで説明したように、アプリの権限をリクエストする場合は、アプリのマニフェスト ファイルで対象となる権限を宣言する必要があります。この宣言により、アプリストアとユーザーは、アプリが要求する可能性のある権限セットについて理解できます。

権限リクエストを実行するプロセスは、権限のタイプによって異なります。

  • 権限がインストール時の権限(通常の権限や署名の権限など)である場合、インストール時に権限が自動的に付与されます。
  • 権限が実行時の権限で、かつ Android 6.0(API レベル 23)以上を実行しているデバイスにアプリがインストールされている場合、自分で権限をリクエストする必要があります。

アプリ マニフェストに宣言を追加する

アプリがリクエストする権限を宣言するには、アプリのマニフェスト ファイル内に適切な <uses-permission> 要素を追加します。たとえば、カメラにアクセスする必要があるアプリの場合、マニフェストに次の行を記述します。

AndroidManifest.xml

<manifest ...>
    <uses-permission android:name="android.permission.CAMERA"/>
    <application ...>
        ...
    </application>
</manifest>

ハードウェアをオプションとして宣言する

CAMERA などの権限により、一部の Android デバイスだけが持つハードウェアにアプリがアクセスできます。ハードウェア関連の権限のいずれかがアプリで宣言されている場合は、そのハードウェアが搭載されていないデバイスでアプリをまったく実行できないのかどうかをよく確認してください。ほとんどの場合、ハードウェアはオプションであるため、<uses-feature> 宣言で android:requiredfalse に設定し、ハードウェアをオプションとして宣言することをおすすめします。次のコード スニペットの例をご覧ください。

AndroidManifest.xml

<manifest ...>
    <application>
        ...
    </application>
    <uses-feature android:name="android.hardware.camera"
                  android:required="false" />
<manifest>

ハードウェアが使用できるかどうかを判断する

ハードウェアをオプションと宣言した場合、そのハードウェアが搭載されていないデバイスでアプリを実行できる可能性があります。デバイスに特定のハードウェアが含まれているかどうかを確認するには、次のコード スニペットに示すように hasSystemFeature() メソッドを使用します。ハードウェアが利用できない場合は、アプリでその機能を適切に無効にします。

Kotlin

// Check whether your app is running on a device that has a front-facing camera.
if (applicationContext.packageManager.hasSystemFeature(
        PackageManager.FEATURE_CAMERA_FRONT)) {
    // Continue with the part of your app's workflow that requires a
    // front-facing camera.
} else {
    // Gracefully degrade your app experience.
}

Java

// Check whether your app is running on a device that has a front-facing camera.
if (getApplicationContext().getPackageManager().hasSystemFeature(
        PackageManager.FEATURE_CAMERA_FRONT)) {
    // Continue with the part of your app's workflow that requires a
    // front-facing camera.
} else {
    // Gracefully degrade your app experience.
}

API レベルで権限を宣言する

実行時の権限をサポートするデバイス、つまり Android 6.0(API レベル 23)以降を搭載しているデバイスでのみ権限を宣言するには、uses-permission 要素ではなく uses-permission-sdk-23 要素を追加します。

上記の要素を使用する場合、maxSdkVersion 属性を設定できます。この属性は、maxSdkVersion より後のバージョンを搭載したデバイスでは特定の権限が不要であることを示します。