2016-06-13 76 views
0

我正在尝试获取用户的最后一个位置。为此,我已经在manifest xml文件中声明了以下权限。清单中未识别权限声明

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> 
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 
<uses-permission android:name="android.permission.INTERNET" /> 

但在这个代码,它不断出现以下错误:

Code should explicitly check to see if permission is available.

我没有看到这一点,但我无论如何增加了以下检查。

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

这会阻止显示错误,但是当我运行应用程序时,它最终返回。我缺少什么许可?过了一段时间,因为我在Android上工作,我不记得要处理这些额外的检查。明确的许可声明已足够。请咨询我缺少的东西。

代码:

LocationManager locationManager; 
String provider; 

@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); 
    Location location = null; 

    if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED 
      && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { 
     Log.i("location", "returned"); // This log will occur 
     return; //return will occur 
    } 
    location = locationManager.getLastKnownLocation(provider); //this is the line that requires permission 

    Log.i("location", "This log will not occur"); 
} 
+0

你运行什么android版本。请注意,在Android 6中更改权限,请阅读文档。 – Olayinka

+0

@Olayinka我目前使用API​​ 23. – JasSy

回答

3

在安卓6.0,擅自批准并获得改变。在清单中添加权限不再保证访问权限。用户现在有权在他选择时撤销和授予您权限。

您需要明确从用户请求一些权限。用户可以选择授予您许可权,然后继续工作。用户也可以选择拒绝该请求,然后您必须弄清楚如何处理这种情况。

授予的权限不是最终的。用户仍然可以在将来晚些时候撤消权限,因此您必须记录您的权限。如果权限对于应用程序的性能至关重要,请帮助用户了解,在请求权限时,权限对于应用程序正常工作(通过使用对话框/弹出窗口)是必不可少的。

为了更好地理解read this

你做了什么检查,如果你有必要的权限。 而不是突破的方法,request for the permission

+0

即使在那时,我已经添加了权限检查。在我的模拟器上,系统没有要求明确许可的回应。尝试在实际的设备和相同的问题。将看看你的链接。 – JasSy

+0

@JasSy请按照答案中的链接阅读文档。 – Olayinka