2017-04-05 27 views
0

我正在創建一個里程錶服務一個Android教程:https://github.com/dogriffiths/HeadFirstAndroid/tree/master/chapter13/Odometer無法創建服務java.lang.SecurityException異常:「GPS」定位提供商需要ACCESS_FINE_LOCATION許可

看來我需要去詢問用戶使用位置服務的權限。 https://developer.android.com/training/permissions/requesting.html

但是,這似乎是活動延伸ActivityCompat。我的MainActivity擴展了Activity。

有沒有人有擴展活動類時如何實現requestPermissions()的例子?它究竟在哪裏呢?在課堂上還是在onCreate上?

感謝

+0

'Activity' has'requestPermissions' method ... – Selvin

回答

0

ContextCompat是公共類從android.support.v4庫派生,它不是涉及到AppCompatActivity。有關Android版本23檢查權限和了,你會做這樣的事情:

private void getPermission(String permission, Integer requestCode) { 
    if (ContextCompat.checkSelfPermission(test_activity.this, permission) != PackageManager.PERMISSION_GRANTED) { 
     ActivityCompat.requestPermissions(test_activity.this, new String[]{permission}, requestCode); 
    } else { 
     Toast.makeText(this, "" + permission + " is already granted.", Toast.LENGTH_SHORT).show(); 
    } 
} 

比調用onCreate方法:

getPermission(android.Manifest.permission.ACCESS_FINE_LOCATION, requestCode);

比覆蓋onRequestPermissionsResult和處理結果:

@Override 
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { 
    super.onRequestPermissionsResult(requestCode, permissions, grantResults); 
if(ActivityCompat.checkSelfPermission(this, permissions[0]) == PackageManager.PERMISSION_GRANTED){ 
    switch (requestCode) { 
     //Location 
     case 1: 
      // do something 
      break; 
    } 
    else 
{ 
Toast.makeText(this, "Permission denied", Toast.LENGTH_SHORT).show(); 
} 
} 
相關問題