Skip to content

Instantly share code, notes, and snippets.

@MasayukiFukada
Created December 5, 2017 14:41
Show Gist options
  • Save MasayukiFukada/015e49ab3f6865808169a7b15c2e482e to your computer and use it in GitHub Desktop.
Save MasayukiFukada/015e49ab3f6865808169a7b15c2e482e to your computer and use it in GitHub Desktop.
Android SDK 23 以降の権限確認サンプルq
package com.example.minamo.permissiontest;
import android.Manifest;
import android.content.Context;
import android.content.pm.PackageManager;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
public class MainActivity extends AppCompatActivity {
final int REQUEST_ACCESS_COARSE_LOCATION = 10;
final int REQUEST_ACCESS_FINE_LOCATION = 11;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
setupButton();
}
private void setupButton() {
final Context self = this;
Button button = (Button) findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// 権限の確認。PERMISSION_GRANTED でない場合、権限リクエストのダイアログが表示される
int coarseLocationPermission = ContextCompat.checkSelfPermission(self, Manifest.permission.ACCESS_COARSE_LOCATION);
int fineLocationPermission = ContextCompat.checkSelfPermission(self, Manifest.permission.ACCESS_FINE_LOCATION);
if (coarseLocationPermission != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.ACCESS_COARSE_LOCATION}, REQUEST_ACCESS_COARSE_LOCATION);
}
if (fineLocationPermission != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.ACCESS_COARSE_LOCATION}, REQUEST_ACCESS_FINE_LOCATION);
}
}
});
}
// 権限ダイアログの表示時や、ボタン押下時に反応する
@Override
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
switch (requestCode) {
case REQUEST_ACCESS_FINE_LOCATION:
case REQUEST_ACCESS_COARSE_LOCATION:
if (grantResults.length <= 0) {
return;
}
if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// OK
} else if(grantResults[0] == PackageManager.PERMISSION_DENIED) {
// NG
// 「許可しない」を選択した時にも反応
// リクエストを出すべきか、出しても良いかの判断
if (shouldShowRequestPermissionRationale(Manifest.permission.ACCESS_FINE_LOCATION)) {
new AlertDialog.Builder(this)
.setTitle("パーミッション")
.setMessage("リクエストを表示すべき")
.setPositiveButton("OK", null)
.show();
} else {
new AlertDialog.Builder(this)
.setTitle("パーミッション")
.setMessage("リクエストを表示してはダメ")
.setPositiveButton("OK", null)
.show();
}
} else {
// ?
}
return;
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment