2015-11-20 27 views
-1

我想在我的應用程序中使用GPS。但是當我試圖檢索GPS讀數代碼所示belwo,Android的工作室給了我belwo提到的錯誤GPS讀取不能被檢索

despit所有必需的權限被添加到清單文件

代碼

LocationManager lm = (LocationManager) ctx.getSystemService(Context.LOCATION_SERVICE); 
    LocationListener ll = new LocationListener() { 
     @Override 
     public void onLocationChanged(Location location) { 
      Log.w(TAG, "onLocationChanged"); 
     } 

     @Override 
     public void onStatusChanged(String provider, int status, Bundle extras) { 
      Log.w(TAG, "onStatusChanged"); 

     } 

     @Override 
     public void onProviderEnabled(String provider) { 
      Log.w(TAG, "onProviderEnabled"); 
     } 

     @Override 
     public void onProviderDisabled(String provider) { 
      Log.w(TAG, "onProviderDisabled"); 
     } 
    }; 
    lm.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, ll);//error at this line 

enter image description here

+1

https://開頭計算器。 com/questions/32635704 /不能獲得權限 – CommonsWare

+0

@CommonsWare但添加了所有權限。 – LetsamrIt

+1

引用我的答案:「對於這些權限,您的targetSdkVersion 23+應用程序不僅需要具有元素,還需要您在Android上的用戶在運行時請求這些權限6.0+設備,使用checkSelfPermission()和requestPermissions()**等方法。「 (強調增加) – CommonsWare

回答

1

這是由於在Marshmallow(Android版本6.0)用戶可以選擇關閉權限。只需包裝此檢查以查看您的位置代碼之前是否已啓用權限。

if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED && ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED) { 

} 

你還應該寫一個else語句的請求代碼,如果他們沒有得到它的話,它會向用戶請求許可。

這裏是一個不錯的請求權限的方法:

public void requestPermissions(List<String> permissions, ActivityCompat.OnRequestPermissionsResultCallback onRequestPermissionsResultCallback) { 
    String[] params = permissions.toArray(new String[permissions.size()]); 
    requestPermissions(params, onRequestPermissionsResultCallback); 
} 

在你的情況下,你將不得不通過它的位置許可,您可以用這種方法獲得:

private List<String> getRequiredLocationPermissions() { 
    String accessCoarsePermission = android.Manifest.permission.ACCESS_COARSE_LOCATION; 
    String accessFineLocationPermission = android.Manifest.permission.ACCESS_FINE_LOCATION; 
    int hasCoarsePermission = ContextCompat.checkSelfPermission(getActivity(), accessCoarsePermission); 
    int hasFineLocationPermission = ContextCompat.checkSelfPermission(getActivity(), accessFineLocationPermission); 
    List<String> permissions = new ArrayList<>(); 
    if (hasCoarsePermission != PackageManager.PERMISSION_GRANTED) { 
     permissions.add(accessCoarsePermission); 
    } 
    if (hasFineLocationPermission != PackageManager.PERMISSION_GRANTED) { 
     permissions.add(accessFineLocationPermission); 
    } 
    return permissions; 
}