前提・実現したいこと
AndroidStudio4.1を使い現在位置を緯度経度で表示させるアプリを作っているのですが、Android6.0から位置情報などのセキュリティが必要な機能は、一度ユーザーに利用許可のダイアログを表示して「OK」ボタンを押してもらわないと使えなくなったと思うのですが、その利用許可のチェックをするコードが間違っているとエラーになりました。「PackageManager.PERMISSION_GRANTED」ここが赤字になっています。
いくら調べてもわからないのでお願いします。
発生している問題・エラーメッセージ
Must be one of:PerMissionCheker.PERMISSION_GRANTED,PerMissionCheker.PERMISSION_DENIED,PerMissionCheker.PERMISSION_DENIED_APP_OP
エラーメッセージ
該当のソースコード
LocationEx.java
1package net.npaka.locationex; 2 3import android.Manifest; 4import android.app.Activity; 5import android.content.Context; 6import android.content.pm.PackageManager; 7import android.graphics.Color; 8import android.location.Location; 9import android.location.LocationListener; 10import android.location.LocationManager; 11import android.os.Bundle; 12import android.view.ViewGroup; 13import android.view.Window; 14import android.widget.LinearLayout; 15import android.widget.TextView; 16import androidx.core.app.ActivityCompat; 17import androidx.core.content.PermissionChecker; 18//位置情報の取得 19public class LocationEx extends Activity implements LocationListener{ 20 private final static String BR = System.getProperty("line.separator"); 21 private final static int WC = ViewGroup.LayoutParams.WRAP_CONTENT; 22 private final static String[] PERMISSIONS = { 23 Manifest.permission.ACCESS_COARSE_LOCATION, 24 Manifest.permission.ACCESS_FINE_LOCATION}; 25 private final static int REQUEST_PERMISSION = 1; 26 private TextView textView;//テキストビュー 27 private LocationManager manager; 28 29 @Override 30 public void onCreate(Bundle bundle){ 31 super.onCreate(bundle); 32 requestWindowFeature(Window.FEATURE_NO_TITLE); 33 34 //レイアウトの作成 35 LinearLayout layout = new LinearLayout(this); 36 layout.setBackgroundColor(Color.WHITE); 37 layout.setOrientation(LinearLayout.VERTICAL); 38 39 //テキストビューの生成 40 textView = new TextView(this); 41 textView.setTextSize(24); 42 textView.setTextColor(Color.BLACK); 43 textView.setLayoutParams(new LinearLayout.LayoutParams(WC,WC)); 44 45 //ロケーションマネージャーの取得 46 manager 47 =(LocationManager)getSystemService(Context.LOCATION_SERVICE); 48 49 //ユーザー利用許可のチェック 50 checkPermissions(); 51 52 } 53 54 //アクティビティ再開時に呼ばれる 55 @Override 56 public void onResume() { 57 super.onResume(); 58 59 //位置情報更新の開始 60 setLocationUpdateEnabled(true); 61 } 62 63 //アクティビティ一時停止時に呼ばれる 64 @Override 65 public void onPause() { 66 super.onPause(); 67 68 //位置情報更新の開始 69 setLocationUpdateEnabled(false); 70 } 71 72 //位置情報を通知する時に呼ばれる 73 public void onLocationChanged(Location location) { 74 //緯度と経度の取得 75 textView.setText("LocationEx>"+BR+ 76 "緯度:"+location.getLatitude()+BR+ 77 "経度:"+location.getLongitude()); 78 } 79 80 //位置情報取得有効化を通知する時に呼ばれる 81 public void onProviderEnabled(String provider) { 82 } 83 84 //位置情報取得無効化を通知する時に呼ばれる 85 public void onProviderDisabled(String provider) { 86 } 87 88 //位置情報更新の開始・停止 89 private void setLocationUpdateEnabled(boolean enabled) { 90 //パーミッションのチェック 91 if (isGranted()) { 92 return; 93 } 94 95 //ロケーションマネージャの登録と解除 96 try { 97 if (enabled) { 98 manager.requestLocationUpdates( 99 LocationManager.NETWORK_PROVIDER, 0, 0, this); 100 } else { 101 manager.removeUpdates(this); 102 } 103 } catch (SecurityException e) { 104 e.printStackTrace(); 105 } 106 } 107 108 //ユーザーの利用許可のチェック 109 private void checkPermissions() { 110 //未許可 111 if(!isGranted()) { 112 //許可ダイアログの表示 113 ActivityCompat.requestPermissions(this, PERMISSIONS, 114 REQUEST_PERMISSION); //エラー場所 115 } 116 } 117 118 //ユーザーの利用許可が済かどうかの取得 119 private boolean isGranted() 120 { 121 for (int i = 0; i<PERMISSIONS.length; i++) { 122 if (PermissionChecker.checkSelfPermission(LocationEx.this, PERMISSIONS[i]) != 123 PackageManager.PERMISSION_GRANTED) { 124 return false; 125 } 126 } 127 return true; 128 } 129 130 //許可ダイアログ選択時に呼ばれる 131 @Override 132 public void onRequestPermissionsResult(int requestCode, 133 String[] permissions, int[] results) { 134 if (requestCode == REQUEST_PERMISSION) { 135 //未許可 136 if (isGranted()) { 137 textView.setText("LocationEx>"+BR+ 138 "位置情報の取得が未許可です"); 139 } 140 } else{ 141 super.onRequestPermissionsResult( 142 requestCode, permissions, results); 143 } 144 } 145}
AndroidManifest.xml
1<?xml version="1.0" encoding="utf-8"?> 2<manifest xmlns:android="http://schemas.android.com/apk/res/android" 3 package="net.npaka.locationex"> 4 5 6 <uses-permission android:name="android.permission.INTERNET"/> 7 <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> 8 <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> 9 10 <application 11 android:allowBackup="false" 12 android:icon="@mipmap/ic_launcher" 13 android:label="@string/app_name" 14 android:supportsRtl="false" 15 android:theme="@style/Theme.LocationEx" 16 android:fullBackupContent="@xml/backup_descriptor"> 17 18 <activity 19 android:label="@string/app_name" 20 android:name=".LocationEx"> 21 <intent-filter> 22 <action android:name="android.intent.action.MAIN" /> 23 <category android:name="android.intent.category.LAUNCHER" /> 24 </intent-filter> 25 </activity> 26 </application> 27 28</manifest>
試したこと
クリーンデバッグや再起動、エラーで検索をかけたりしましたがどれも解決しませんでした。
補足情報
開発環境はAndroidStudio4.1、Windows10、Android Gradle Plugin Ver4.1.0、Gradle Ver6.5.1、エミュレーターはPixel 3 API30です。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/11/19 00:56
2020/11/19 13:22