1. Qiita
  2. 投稿
  3. Android

Android MのPermissionを試してみた

  • 28
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

Permissions | Android Developers ←のドキュメントをざっと読んで試してみました。

注意

  • 本当に軽く試しただけなので間違ってる箇所あるかもです。
  • 今後変更される可能性あります。

Gradle設定

MのPermission管理を有効にするためにcompileSdkVersionminSdkVersiontargetSdkVersionを変更しています。

ドキュメントに下記のように書いてあって、現状だとminSdkVersionを変更できないっぽいので下位バージョンで試せなかった。

For the preview release, you must set minSdkVersion to "MNC" to compile with the preview SDK.

build.gradle
apply plugin: 'com.android.application'

android {
    compileSdkVersion "android-MNC"
    buildToolsVersion "22.0.1"

    defaultConfig {
        applicationId "com.example.example"
        minSdkVersion "MNC"
        targetSdkVersion "MNC"
        versionCode 1
        versionName "1.0"
    }
    // ...
}

// ...

Manifest

MでのPermission指定はuses-permission-sdk-mを使うみたいです。

AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.example" >

    <uses-permission-sdk-m android:name="android.permission.READ_PHONE_STATE" />

    <!-- ... -->

</manifest>

コード

電話番号を取得するサンプルです。

MainActivity.java
public class MainActivity extends AppCompatActivity {

    private static int MY_PERMISSIONS_REQUEST_READ_PHONE_STATE = 1;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        if (checkSelfPermission(Manifest.permission.READ_PHONE_STATE) != PackageManager.PERMISSION_GRANTED) {
            // 権限がない場合はリクエスト
            requestPermissions(new String[]{Manifest.permission.READ_PHONE_STATE}, MY_PERMISSIONS_REQUEST_READ_PHONE_STATE);
        } else {
            showLineNumber();
        }
    }

    @Override
    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
        if (MY_PERMISSIONS_REQUEST_READ_PHONE_STATE == requestCode) {
            if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                // 許可された
                showLineNumber();
            } else {
                // 拒否された
                Toast.makeText(this, "拒否された", Toast.LENGTH_SHORT).show();
            }
        }
    }

    private void showLineNumber() {
        TelephonyManager telephonyManager = (TelephonyManager) getSystemService(TELEPHONY_SERVICE);
        Toast.makeText(this, telephonyManager.getLine1Number(), Toast.LENGTH_SHORT).show();
    }

}

checkSelfPermission

Permissionをチェックします

requestPermissions

Permissionのリクエストをします。このときダイアログが表示されます。

onRequestPermissionsResult

requestPermissionsの結果がコールバックされます。

実行

エミュレータで確認しました。(ちょいちょいフリーズしてツラかった)

リクエストダイアログ

Permissionのリクエストはこんな感じのダイアログが表示されます

スクリーンショット 2015-05-29 12.18.18.png

Settings

SettingsアプリのApps > 対象アプリ > PermissonsでPermissonの確認ができます。

スクリーンショット 2015-05-29 12.28.20.png