2017-04-05 117 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(); 
} 
} 
相关问题