0

我正在編寫代碼以從位置管理器獲取lastknownlocation,並且這促使我添加運行時權限。在棉花糖上添加位置權限

這裏是我的代碼:

public class MainActivity extends AppCompatActivity implements LocationListener { 

    LocationManager locationManager; 
    String provider; 
    private final int MY_PERMISSIONS_REQUEST_CODE=1; 
    Location location; 
    Boolean isPermissionGranted=false; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 

     provider = locationManager.getBestProvider(new Criteria(), false); 


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

      if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { 
       requestPermissions(new String[]{Manifest.permission.ACCESS_FINE_LOCATION,Manifest.permission.ACCESS_COARSE_LOCATION},MY_PERMISSIONS_REQUEST_CODE); 
      } 

      // return; 
     } 

    } 

    public void getlastknownposition() 
    { 

    } 

    @Override 
    public void onLocationChanged(Location location) { 

    } 

    @Override 
    public void onStatusChanged(String provider, int status, Bundle extras) { 

    } 

    @Override 
    public void onProviderEnabled(String provider) { 

    } 

    @Override 
    public void onProviderDisabled(String provider) { 

    } 


    @Override 
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { 
     super.onRequestPermissionsResult(requestCode, permissions, grantResults); 


     if(requestCode == MY_PERMISSIONS_REQUEST_CODE) 
     { 
      if(grantResults[0]==PackageManager.PERMISSION_GRANTED && grantResults[1]==PackageManager.PERMISSION_GRANTED){ 

      Toast.makeText(MainActivity.this," granted "+grantResults[0]+"granted2"+grantResults[1], Toast.LENGTH_SHORT).show(); 


      location = locationManager.getLastKnownLocation(provider);} 

     } 

    } 

} 

我仍然得到一個錯誤「呼叫需要可以由用戶被拒絕權限:代碼應明確檢查,看是否許可可用(與checkPermission)或明確處理一個潛在的SecurityExceptiononRequestPermissionsResultlocation = locationManager.getLastKnownLocation(provider);

+0

你嘗試過包裝該行以'如果(ActivityCompat.checkSelfPermission' ..我認爲該錯誤信息是非常明確的 - 只是因爲你在'onRequestPermissionResult'內調用並不意味着你不必檢查,你也可以在'try/catch'中包裝該行 - 錯誤是明確的..你需要捕獲一個潛在的' SecurityException'。 – trooper

+0

你應該改變'requestPermissi ons'到'ActivityCompat.requestPermissions'。 – kimbaudi

+0

試試這可能是工作http://stackoverflow.com/a/41221852/5488468 –

回答

0

將圍繞第二一些括號如果onPermissionsResult =)

if(requestCode == MY_PERMISSIONS_REQUEST_CODE){ 
     if(grantResults[0]==PackageManager.PERMISSION_GRANTED && grantResults[1]==PackageManager.PERMISSION_GRANTED){ 
      Toast.makeText(MainActivity.this," granted "+grantResults[0]+"granted2"+grantResults[1], Toast.LENGTH_SHORT).show(); 

      location = locationManager.getLastKnownLocation(provider); 
     } else { 
       //TODO handle user saying NO! :) 
     } 
    } 

提示:如果您要求FINE_LOCATION,則不需要COARSE,它已包含它。

+0

仍然同樣的錯誤。 –

+0

在評論中建議用try/catch包圍它,然後,我檢查了一些我有的項目,實際上我調用了一個方法,並且該方法可能會引發安全異常。我想不出任何其他的解決方法。 – Alqueraf

0

替換行

location = locationManager.getLastKnownLocation(provider); 

if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED 
    && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED) 
{ 
    location = locationManager.getLastKnownLocation(provider); 
}