【问题标题】:how to call SettingsApi in a cordova application如何在科尔多瓦应用程序中调用 SettingsApi
【发布时间】:2016-02-15 11:06:08
【问题描述】:

根据安卓开发者文档https://developers.google.com/android/reference/com/google/android/gms/location/SettingsApi

它说GoogleApiClient 可以在 onCreate 内部调用,并且通过使用该 GPS 可以在应用程序启动时启用

如何在cordova application 中执行此操作?

目前我正在尝试使用基本的 cordova 应用程序

public class MainActivity extends CordovaActivity implements ConnectionCallbacks, OnConnectionFailedListener {
    public void onCreate(Bundle savedInstanceState)
    {
         googleApiClient = new GoogleApiClient.Builder(MainActivity.this) 
         .....
         googleApiClient.connect();
    }
    public void onConnected(Bundle connectionHint) {
         LocationRequest locationRequest = LocationRequest.create();
         .....
         LocationSettingsRequest.Builder builder = new LocationSettingsRequest.Builder().addLocationRequest(locationRequest);

         builder.setAlwaysShow(true);
         PendingResult<LocationSettingsResult> result = LocationServices.SettingsApi.checkLocationSettings(googleApiClient, builder.build());

         result.setResultCallback(new ResultCallback<LocationSettingsResult>() {
           @Override 
           public void onResult(LocationSettingsResult result) {
           }
         });
    }
}

但是在启动应用程序时没有任何反应

我希望出现Use Location? 对话框

【问题讨论】:

    标签: android cordova


    【解决方案1】:

    您可以在应用启动时使用cordova-plugin-request-location-accuracy 请求高精度定位模式(即 GPS)。它使用 Google Play Services Location API (v7+) 检查/更改设备位置设置。如果当前设备位置设置的准确性低于请求的级别(或完全关闭),本机对话框将提示用户,如果他们接受,GPS 将打开。

    如果用户没有最新版本的 Google Play 服务或在访问它时遇到其他问题,您可能希望使用 cordova.plugins.diagnostic 作为后备并显示位置设置页面,以便用户可以手动开启 GPS。

    请注意,Cordova 应用程序通常不使用本机 onCreate,因为这通常在 Cordova WebView 实例化之前调用,因此在“应用程序”逻辑存在之前。相反,它可以在 Cordova 的 deviceready 事件上调用,该事件在 Cordova 环境设置完成时触发。

    示例用法:

    function onRequestSuccess(success){
        console.log("Successfully set requested accuracy: "+success.message);
    }
    
    function onRequestFailure(error){
        console.error("Accuracy request failed: error code="+error.code+"; error message="+error.message);
        if(error.code === cordova.plugins.locationAccuracy.ERROR_USER_DISAGREED){
            // User disagreed so exit the app
            navigator.app.exitApp();
        }else{
            if(window.confirm("Failed to automatically set Location Mode to 'High Accuracy'. Would you like to switch to the Location Settings page and do this manually?")){
                cordova.plugins.diagnostic.switchToLocationSettings();
            }
        }
    }
    
    document.addEventListener("deviceready", function(){
        cordova.plugins.locationAccuracy.request(onRequestSuccess, onRequestFailure, cordova.plugins.locationAccuracy.REQUEST_PRIORITY_HIGH_ACCURACY);
    }, false);
    

    【讨论】:

    • 但是如果用户没有选择yes那么我应该关闭应用并且不应该允许用户使用应用
    • 好的,我会测试,但这仍然只有在 html 被渲染并触发设备就绪后才会发生,所以我可能不同意这个解决方案
    【解决方案2】:

    这比您尝试的要容易。

    Cordova 有自己的地理定位 API。

    只需在 config 和 android.xml 中添加权限

    app/res/xml/config.xml

    <plugin name="Geolocation" value="org.apache.cordova.GeoBroker" />
    

    app/AndroidManifest.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.ACCESS_LOCATION_EXTRA_COMMANDS" />
    

    并调用 API

    geolocation.getCurrentPosition
    geolocation.watchPosition
    geolocation.clearWatch
    

    文档:

    https://cordova.apache.org/docs/en/2.5.0/cordova/geolocation/geolocation.html

    编辑:

    好像有一个插件可以做你想做的事

    https://github.com/rodrigo-martinezd/cordova-dialog-gpsenter link description here

    发布你的结果,因为我还没有测试过;)

    【讨论】:

    • 我能够获取位置并渲染所有这些东西,我希望应用程序在启动应用程序时如果 GPS 被禁用,我希望应用程序询问启用 GPS 的问题
    • 就用这个方法。在 getCurrentPosition 中,如果 GPS 被禁用,您会收到错误回调。在这种情况下,只需打开一个警报,要求用户启用它。这是你想要的行为吗?如果用户手动禁用它,我认为应用程序无法自行启用 GPS。
    • 发出警报要求用户启用它不是我想要的,我希望调用设置 API 并像这样询问i.stack.imgur.com/lofGl.png 这是谷歌播放服务中新引入的本机对话框
    • 我经历过,根据代码它只使用 AlertDialog.Builder 这意味着它只会显示一个本机对话框,但在我的情况下,当我回复时 GPS 本身将被启用对话框
    【解决方案3】:

    这就是你想要的 - https://github.com/dpa99c/cordova-plugin-request-location-accuracy - 当我在这里遇到你的问题时,我正在寻找同样的东西!

    【讨论】:

    • 我的错,在发布我的之前没有刷新页面。干杯!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-02-08
    • 2017-06-08
    • 1970-01-01
    • 1970-01-01
    • 2017-07-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多