2017-08-24 97 views
0

我有一個Android應用程序發送GPS位置到DB。 我今天測試過,發現位置管理器需要調用requestLocationUpdates的權限。requestLocationUpdates權限

我想設置允許的權限,我不想問設備或用戶的權限。

enter image description here

現在,代碼需要添加一些代碼,要求准予?

/** 
 
    * Enable location services 
 
    */ 
 
    public void connect() { 
 
     Log.d(TAG, ".connect() entered"); 
 

 
     // Check if location provider is enabled 
 
     String locationProvider = LocationManager.NETWORK_PROVIDER; 
 
     if (!locationManager.isProviderEnabled(locationProvider)) { 
 
      Log.d(TAG, "Location provider not enabled."); 
 
      app.setCurrentLocation(null); 
 
      return; 
 
     } 
 

 
     // register for location updates, if location provider and permission are available 
 
     String bestProvider = locationManager.getBestProvider(criteria, false); 
 
     if (bestProvider != null) { 
 
      locationManager.requestLocationUpdates(bestProvider, Constants.LOCATION_MIN_TIME, Constants.LOCATION_MIN_DISTANCE, this); 
 
      app.setCurrentLocation(locationManager.getLastKnownLocation(locationProvider)); 
 
     } 
 
    } 
 

 
    /** 
 
    * Disable location services 
 
    */ 
 
    public void disconnect() { 
 
     Log.d(TAG, ".disconnect() entered"); 
 

 
     String locationProvider = LocationManager.NETWORK_PROVIDER; 
 
     if (locationManager.isProviderEnabled(locationProvider)) { 
 
      locationManager.removeUpdates(this); 
 
     } 
 
    }

我已經加入體現了。 PS:此權限是新近需要的,因爲我幾天前在相同設備(Android 4.4)上測試了應用程序,並且它運行良好。 自2017/08/21以來Android上的某些默認權限可能已更改嗎?如果是的話,我該如何改變它?

+2

*我想設置權限允許的我不想問設備或用戶的許可。*太糟糕了,你想要的是不可能 –

+0

你可以發佈一些代碼嗎? –

+0

@Sandeepdhiman我添加了它。 –

回答

0

你將不得不寫一種方法來檢查用戶是否授予權限。如果沒有,則請求用戶許可。 Constants.LOCATION_PERMISSION_REQUEST只是requestcode匹配時onRequestpermission結果

public static boolean checkLocationPermission(Activity activity){ 
     if(ActivityCompat.checkSelfPermission(activity, android.Manifest.permission.ACCESS_FINE_LOCATION) 
       != PackageManager.PERMISSION_GRANTED 
      || ActivityCompat.checkSelfPermission(activity, android.Manifest.permission.ACCESS_COARSE_LOCATION) 
       != PackageManager.PERMISSION_GRANTED){ 

      ActivityCompat.requestPermissions(activity, new String[]{android.Manifest.permission.ACCESS_FINE_LOCATION, 
        android.Manifest.permission.ACCESS_COARSE_LOCATION}, Constants.LOCATION_PERMISSION_REQUEST); 
      return false; 
     } 
     return true; 
    } 

了回調當用戶允許,你會得到回調上覆蓋的方法「onRequestPermissionsResult()」

+0

我認爲這對我很有用。你能告訴我什麼是「WaselGiftConstants」嗎? –

+0

@ ch.ihssen它只是請求代碼 –

+0

你能解釋請求代碼更多我無法解決它在我的應用程序。你有什麼想法可以幫助。謝謝 –

1

你必須從運行時間的棉花糖版本的機器人請求權限。通過這個link

進去的Android 6.0(API級別23)開始,用戶授予權限的應用程序應用程序運行時,而不是當他們安裝應用程序。此方法簡化了應用程序安裝過程,因爲用戶在安裝或更新應用程序時無需授予權限。它還使用戶可以更好地控制應用程序的功能;例如,用戶可以選擇給相機應用程序訪問相機,但不能訪問設備位置。用戶可以隨時撤銷權限,只需轉到應用的「設置」屏幕即可。

我們用下面的代碼來檢查的位置的權限:

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. 
      return; 
     } 
+0

是的我實際上在詢問這段代碼。我的設備是API 17. –

+0

你怎麼能解釋它幾天前在我的設備上正常工作的事實。 –

+0

可能是您更改了'buildToolsVersion'或'targetSdkVersion'或'compileSdkVersion' –

0

這是檢查權限 com.github.fccaikai最好的圖書館:AndroidPermissionX:1.0.0

例代碼:

final PermissionCompat.Builder builder = new PermissionCompat.Builder(activity); 

    builder.addPermissions(new String[]{ 
      Manifest.permission.CAMERA, 
      Manifest.permission.RECORD_AUDIO 
    }); 

    builder.addPermissionRationale(activity.getString(R.string.permission_rationale)); 

    builder.addRequestPermissionsCallBack(new OnRequestPermissionsCallBack() { 
     @Override 
     public void onGrant() { 
      Log.d(TAG, "Grant"); 
     } 

     @Override 
     public void onDenied(String permission) { 
      Log.e(TAG, "Denied"); 
     } 
    }); 

    builder.build().request(); 
+0

我想獲取GPS位置不是攝像機 –

+0

這只是一個例子。將它們更改爲您的權限。 –