出處
Android 6 以上的版本加上GPS地圖定位授權要求
Android 6 以上的版本在要求授權的時候是在使用該權限的當下跳出來詢問的,例如取得GPS時就會在當下需要去檢查是否有經過授權。
如果我們沒有特別提供授權的功能的話,使用者是無法使用的,除非去 Android 的應用程式設定去將定位打開(不是開啟手機的定位功能喔!)是應用程式自己可以使用定位的授權。
早期我們要取得定位服務只需要
如果權限沒有被開啟就會直接被 return
所以我們必須多做一段這個:
private static final int REQUEST_FINE_LOCATION_PERMISSION = 102;
如果我們沒有特別提供授權的功能的話,使用者是無法使用的,除非去 Android 的應用程式設定去將定位打開(不是開啟手機的定位功能喔!)是應用程式自己可以使用定位的授權。
早期我們要取得定位服務只需要
lms = (LocationManager) getSystemService(LOCATION_SERVICE);
但是在 android 6 之後,android studio 就會要求我們要做檢查的動作:if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { //如果沒有授權使用定位就會跳出來這個 // TODO: Consider calling // ActivityCompat#requestPermissions // here to request the missing permissions, and then overriding // public void onRequestPermissionsResult(int requestCode, String[] permissions, // int[] grantResults) // to handle the case where the user grants the permission. See the documentation // for ActivityCompat#requestPermissions for more details. requestLocationPermission(); // 詢問使用者開啟權限 return; }
所以我們必須多做一段這個:
private void requestLocationPermission() { // 如果裝置版本是6.0(包含)以上 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { // 取得授權狀態,參數是請求授權的名稱 int hasPermission = checkSelfPermission( Manifest.permission.ACCESS_FINE_LOCATION); // 如果未授權 if (hasPermission != PackageManager.PERMISSION_GRANTED) { // 請求授權 // 第一個參數是請求授權的名稱 // 第二個參數是請求代碼 requestPermissions( new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, REQUEST_FINE_LOCATION_PERMISSION); } else { // 啟動地圖與定位元件 } } }
沒有留言:
張貼留言