LoginSignup
7
8

More than 5 years have passed since last update.

Android6からの面倒くさい権限をサクッと解決する

Last updated at Posted at 2016-12-16

permissionsdispatcher

スッキリ書ける。
https://github.com/hotchemi/PermissionsDispatcher

電話のデモで試してみた。

build.gradle(Module:app)

permissionsdispatcherをインストール


apply plugin: 'com.android.application'

android {
    compileSdkVersion 25
    buildToolsVersion "24.0.0"
    defaultConfig {
        applicationId "jp.co.test.permissionsdispatcherdemo"
        minSdkVersion 15
        targetSdkVersion 25
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    compile 'com.android.support:appcompat-v7:25.0.1'
    testCompile 'junit:junit:4.12'

   // 追加
    compile 'com.github.hotchemi:permissionsdispatcher:2.3.0'
    annotationProcessor 'com.github.hotchemi:permissionsdispatcher-processor:2.3.0'

}

AndroidManifest.xml

電話の権限を追加


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

    <!-- 追加 -->
    <uses-permission android:name="android.permission.CALL_PHONE" />

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

MainActivity.java

import android.Manifest;
import android.content.DialogInterface;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.widget.Toast;

import permissions.dispatcher.NeedsPermission;
import permissions.dispatcher.OnNeverAskAgain;
import permissions.dispatcher.OnPermissionDenied;
import permissions.dispatcher.OnShowRationale;
import permissions.dispatcher.PermissionRequest;
import permissions.dispatcher.RuntimePermissions;

@RuntimePermissions
public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        MainActivityPermissionsDispatcher.電話するWithCheck(MainActivity.this);
    }

    @Override
    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
        MainActivityPermissionsDispatcher.onRequestPermissionsResult(this, requestCode, grantResults);
    }

    @SuppressWarnings("unused")
    @NeedsPermission(Manifest.permission.CALL_PHONE)
    public void 電話する() {
        Intent intent = new Intent(
                Intent.ACTION_CALL,
                Uri.parse("tel:0123456789"));
        startActivity(intent);
    }

    //許可しないが選択された
    @OnPermissionDenied(Manifest.permission.CALL_PHONE)
    void 許可しないが選択された() {
        Toast.makeText(this, "許可しないが選択されました。次回から「今後表示しない」にチェックを入れるることで、" +
                "表示されません。", Toast.LENGTH_SHORT).show();
    }

    // 絶対に表示しない状態
    @OnNeverAskAgain(Manifest.permission.CALL_PHONE)
    void 絶対に表示しないを選択している() {
        Toast.makeText(this, "権限が拒否されたので一部の機能が使えません。", Toast.LENGTH_SHORT).show();
    }

    @SuppressWarnings("unused")
    @OnShowRationale(Manifest.permission.CALL_PHONE)
    void 権限の説明ダイアログを表示(final PermissionRequest request) {
        new AlertDialog.Builder(this)
                .setTitle("警告")
                .setMessage("電話の権限を許可しないと電話することが出来ません。アプリを使いたい場合は許可して下さい。")
                .setPositiveButton("OK", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        // パーミッション許可ダイアログ
                        request.proceed();
                    }
                })
                .setNegativeButton("Cancel", null)
                .show();

    }
}

7
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
8