質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Q&A

解決済

1回答

2194閲覧

checkSelfPermissionがうまくいかない

k-ryoto514

総合スコア15

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

0グッド

0クリップ

投稿2018/11/01 13:47

前提・実現したいこと

CheckSelfPermissionがうまくいきません

manifestには
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
を書いているのですが、実際に
PackageManager.PERMISSION_GRANTED == ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION))
PackageManager.PERMISSION_GRANTED == ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION))
をするとfalseになります。

該当のソースコード

kotlin

1 if ((PackageManager.PERMISSION_GRANTED == ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION)) and 2 (PackageManager.PERMISSION_GRANTED == ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION))) 3 { 4 Log.w(TAG, "hoge") 5 }

xml

1<?xml version="1.0" encoding="utf-8"?> 2<manifest xmlns:android="http://schemas.android.com/apk/res/android" 3 package="com.example.hoge" 4 android:installLocation="auto" 5> 6 7 <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> 8 <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> 9 10 11 <application 12 android:allowBackup="true" 13 android:icon="@mipmap/ic_launcher" 14 android:label="@string/app_name" 15 android:roundIcon="@mipmap/ic_launcher_round" 16 android:supportsRtl="true" 17 android:theme="@style/AppTheme"> 18 <activity android:name=".MainActivity"> 19 <intent-filter> 20 <action android:name="android.intent.action.MAIN"/> 21 22 <category android:name="android.intent.category.LAUNCHER"/> 23 </intent-filter> 24 </activity> 25 </application> 26 27</manifest> 28

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

ContextCompat.checkSelfPermission()の戻り値としてPERMISSION_GRANTEDが返ってこなかった場合、ActivityCompat.requestPermissions()を呼んで許可を得るアクションを起こす必要があります。例えばこのような記述になるでしょう。

java

1 private final static int REQUEST_CODE = 1000; 2 private final static String[] mPermission = { 3 Manifest.permission.ACCESS_FINE_LOCATION, 4 Manifest.permission.ACCESS_COARSE_LOCATION 5 }; 6 7 @Override 8 public void onCreate(Bundle bundle) { 9 10 // 中略 11 12 if (ContextCompat.checkSelfPermission(this, mPermission[0]) != PackageManager.PERMISSION_GRANTED || 13 ContextCompat.checkSelfPermission(this, mPermission[1]) != PackageManager.PERMISSION_GRANTED) { 14 ActivityCompat.requestPermissions( 15 this, mPermission, REQUEST_CODE); 16 } 17 18 // 中略 19 20 } 21 22 @Override 23 public void onRequestPermissionsResult(int requestCode, 24 @NonNull String permissions[], @NonNull int[] grantResults) { 25 switch (requestCode) { 26 case REQUEST_CODE: { 27 if (grantResults.length > 0 28 && grantResults[0] == PackageManager.PERMISSION_DENIED) { 29 // 許可ダイアログで拒否してしまったときはここに入る 30 Toast.makeText(this, "許可を得られないのでアプリを終了します", 31 Toast.LENGTH_LONG).show(); 32 finish(); 33 } 34 } 35 } 36 } 37 38 // 以下略

requestPermissions()を呼ぶと、画面上に許可ダイアログが表示されます(他のアプリで見たことがあるはず)。この操作結果をonRequestPermissionsResult()で受け取ることができます。

参考資料

実行時のパーミッション リクエスト

投稿2018/11/01 15:36

keicha_hrs

総合スコア6768

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

k-ryoto514

2018/11/07 15:27

解決しました!ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問