mhe*_*dek 2 android android-manifest
我是 Android 开发的新手。所以我的问题可能太基本了。非常遗憾。现在我正在维护以前编写的代码。
此应用程序使用手机的定位服务。在清单文件中它是这样写的:
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
Run Code Online (Sandbox Code Playgroud)
但是虽然用户允许使用位置服务,但在大多数情况下,通过应用程序无法直接获取位置。
例如,虽然我的应用程序无法获取位置信息,但打开 Google 地图应用程序后,我的应用程序始终可以获取位置信息。然后我对位置没有问题。但首先我必须用谷歌地图触发。
什么可能导致这种情况?为什么我的应用打开谷歌地图后可以获取位置?我的清单文件中是否需要其他权限?
我的代码块如下所示,
private static final int LOCATION_SERVICES_RESOLUTION_REQUEST = 9001;
private void initMainActivity() {
int fineAccessGranted = ContextCompat.checkSelfPermission(this,
Manifest.permission.ACCESS_FINE_LOCATION);
int coarseAccessGranted = ContextCompat.checkSelfPermission(this,
Manifest.permission.ACCESS_COARSE_LOCATION);
int externalWrite = ContextCompat.checkSelfPermission(this,
Manifest.permission.WRITE_EXTERNAL_STORAGE);
int externalRead = ContextCompat.checkSelfPermission(this,
Manifest.permission.READ_EXTERNAL_STORAGE);
int camera = ContextCompat.checkSelfPermission(this,
Manifest.permission.CAMERA);
ArrayList<String> permissionsNeeded = new ArrayList<String>();
if (fineAccessGranted == PackageManager.PERMISSION_DENIED)
permissionsNeeded.add(Manifest.permission.ACCESS_FINE_LOCATION);
if (coarseAccessGranted == PackageManager.PERMISSION_DENIED)
permissionsNeeded.add(Manifest.permission.ACCESS_COARSE_LOCATION);
if (externalWrite == PackageManager.PERMISSION_DENIED)
permissionsNeeded.add(Manifest.permission.WRITE_EXTERNAL_STORAGE);
if (externalRead == PackageManager.PERMISSION_DENIED)
permissionsNeeded.add(Manifest.permission.READ_EXTERNAL_STORAGE);
if (camera == PackageManager.PERMISSION_DENIED)
permissionsNeeded.add(Manifest.permission.CAMERA);
if (permissionsNeeded.size() == 0) {
this.initMainActivityAfterPermissions();
} else {
ActivityCompat.requestPermissions(this, permissionsNeeded.toArray(new String[0]), LOCATION_SERVICES_RESOLUTION_REQUEST);
}
}
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
// super.onRequestPermissionsResult(requestCode, permissions, grantResults);
switch (requestCode) {
case LOCATION_SERVICES_RESOLUTION_REQUEST: {
// If request is cancelled, the result arrays are empty.
if (grantResults.length > 0
&& grantResults[0] == PackageManager.PERMISSION_GRANTED) {
this.initMainActivityAfterPermissions();
} else {
}
return;
}
Run Code Online (Sandbox Code Playgroud)
获取位置的代码片段;
result = LocationServices.FusedLocationApi.getLastLocation(instance.mGoogleApiClient);
Run Code Online (Sandbox Code Playgroud)
基本上这意味着您尝试通过检索位置mFusedLocationClient.getLastLocation()并且此时设备上没有位置。所以你需要请求位置更新,比如mFusedLocationClient.requestLocationUpdates. 此链接将很有用https://developer.android.com/training/location/receive-location-updates?hl=es和https://github.com/googlesamples/android-play-location
| 归档时间: |
|
| 查看次数: |
1026 次 |
| 最近记录: |