【发布时间】:2016-04-12 19:47:55
【问题描述】:
我以前玩过 Android 应用程序开发,但现在我正在开发我的第一个严肃的 Android 应用程序。我已经准备好了第一个版本,我们的客户想要对其进行测试。
应用程序使用设备的位置并将位置与其他数据一起发送到服务器。要被允许发送数据,设备必须已获得位置。我已经实现了必要的功能来要求用户访问和许可设备的位置。 (我正在使用 google play 服务获取该位置)
我的问题如下:在模拟器和我测试过的每台设备中,这都能正常工作。用户打开应用程序,应用程序请求权限/访问,并且用户能够使用该应用程序。 现在我已经构建了一个 .apk 文件供客户测试(使用 Android Studio > Build > Build APK)。我的老板开车去找客户,并在他们提供的设备上安装了 .apk(运行 Android 5.1.1 的三星 Galaxy S5 Neo)。在此设备上,我的应用无法获取设备的位置。该应用程序甚至不请求该位置的权限或访问权限。
我想知道是什么导致了这个问题。该设备上的其他应用程序(例如谷歌地图)能够很好地访问该位置。但我的应用程序不能。
我通过 Android Studio 将该应用部署到我的测试设备。这可能是问题吗?我是否需要配置其他选项才能通过 .apk 安装我的应用并访问设备的位置?
我还通过 .apk 将应用程序安装到 Sony 设备上。在那里,应用程序能够检索设备的位置。我还使用 Android Studio 将我的应用程序部署到设备(通过 Run),然后将其卸载,然后通过 .apk 再次安装。
问题设备是特定设备还是我需要考虑其他问题才能通过 apk 文件安装我的应用并使其正常运行?
编辑:我的一些代码...
权限:
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
我正在检查位置设置的代码:
private void checkLocationSettings(PendingResult<LocationSettingsResult> result) {
result.setResultCallback(new ResultCallback<LocationSettingsResult>() {
@Override
public void onResult(@NonNull LocationSettingsResult locationSettingsResult) {
final Status status = locationSettingsResult.getStatus();
// final LocationSettingsStates locationSettingsStates = locationSettingsResult.getLocationSettingsStates();
switch (status.getStatusCode()) {
case LocationSettingsStatusCodes.SUCCESS:
break;
case LocationSettingsStatusCodes.RESOLUTION_REQUIRED:
try {
status.startResolutionForResult(MainActivity.this, REQUEST_CHECK_SETTINGS);
} catch (IntentSender.SendIntentException e) {
// Ignore the error;
}
break;
case LocationSettingsStatusCodes.SETTINGS_CHANGE_UNAVAILABLE:
break;
}
}
});
}
我检查权限的代码:
protected void startLocationUpdates() {
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this, this.permissions, REQUEST_LOCATION_ID);
return;
}
LocationServices.FusedLocationApi.requestLocationUpdates(this.googleApiClient, this.locationRequest, this);
}
编辑 2: 我现在有了设备。当我在设备上从 Android Studio 安装/运行应用程序时,它会正确询问位置权限/设置。
【问题讨论】:
-
不看代码很难判断,但是由于您的客户使用的是v22,您是否在android清单上设置了适当的权限?它还可以帮助您登录失败回调以查看失败的原因。
-
我想是的。我在我的问题中编辑了一些代码。可悲的是,我无权访问该设备来调试它。我希望我的老板能够随身携带。
标签: android android-location fusedlocationproviderapi