在不使用 Play Services API 的情况下启用位置/GPS 设置

Posted

技术标签:

【中文标题】在不使用 Play Services API 的情况下启用位置/GPS 设置【英文标题】:Enable Location/GPS settings without using Play Services API 【发布时间】:2015-07-13 08:48:06 【问题描述】:

您可能已经知道,Google Play 服务中有一个新的位置设置对话框 API。

如果你不知道,这里是使用 Dialog API 的 Maps 应用的截图。

谷歌只在他们的播放服务中添加了该 API 有点不公平。另一方面,我认为如果他们能做到这一点,就会有一种解决方法来做到这一点。这就是我问这个问题的原因。任何信息表示赞赏。

(注意:有一个漏洞可以让开发人员以编程方式启用和禁用 gps/位置设置。但是 SO 上可用的那些技巧不再有效。请不要发布过时的答案。)

【问题讨论】:

你找到解决方案了吗..+1 回答你的 grt 问题 我觉得和你一样,google只在他们的api里面添加是很不公平的 这是可行的,因为 Google 应用程序具有 root 访问权限。另一方面,Google 希望您使用他们自己的 API,因为他们的 API 将位置信息发送到 Google 服务器,因此您的程序将帮助 Google 更准确、更频繁地跟踪一个人的位置。欢迎来到资本主义 :) 但很好的问题,我一直在寻找相同的答案。 【参考方案1】:

你好,这对我有用。

void initApiClient() 
        GoogleApiClient mGoogleApiClient = new GoogleApiClient.Builder(getActivity())
                .addApi(LocationServices.API)
                .addConnectionCallbacks(new GoogleApiClient.ConnectionCallbacks() 
                    @Override
                    public void onConnected(@Nullable Bundle bundle) 
                        showLocationSettingsDialog();
                    

                    @Override
                    public void onConnectionSuspended(int i) 

                    
                )
                .addOnConnectionFailedListener(new GoogleApiClient.OnConnectionFailedListener() 
                    @Override
                    public void onConnectionFailed(@NonNull ConnectionResult result) 
                        Log.i(TAG, "onConnectionFailed() connectionResult = [" + result + "]");
                    
                )
                .build();
        mGoogleApiClient.connect();
    

    void showLocationSettingsDialog() 

        LocationRequest locationRequest = LocationRequest.create();
        locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);

        LocationSettingsRequest.Builder builder = new LocationSettingsRequest.Builder();
        builder.addLocationRequest(locationRequest);
        builder.setAlwaysShow(true);

        Task<LocationSettingsResponse> result = LocationServices.getSettingsClient(getActivity())
                .checkLocationSettings(builder.build());

        result.addOnCompleteListener(new OnCompleteListener<LocationSettingsResponse>() 
            @Override
            public void onComplete(Task<LocationSettingsResponse> task) 
                try 
                    LocationSettingsResponse response = task.getResult(ApiException.class);
                    // All location settings are satisfied. The client can initialize location
                    // requests here.
                 catch (ApiException e) 
                    switch (e.getStatusCode()) 
                        case LocationSettingsStatusCodes.RESOLUTION_REQUIRED:
                            // Location settings are not satisfied. But could be fixed by showing the
                            // user a dialog.
                            try 
                                // Cast to a resolvable exception.
                                ResolvableApiException resolvable = (ResolvableApiException) e;
                                // Show the dialog by calling startResolutionForResult(),
                                // and check the result in onActivityResult().
                                resolvable.startResolutionForResult(
                                        getActivity(),
                                        REQUEST_CHECK_SETTINGS);
                             catch (IntentSender.SendIntentException exception) 
                                // Ignore the error.
                             catch (ClassCastException exception) 
                                // Ignore, should be an impossible error.
                            
                            break;
                        case LocationSettingsStatusCodes.SETTINGS_CHANGE_UNAVAILABLE:
                            // Location settings are not satisfied. However, we have no way to fix the
                            // settings so we won't show the dialog.
                            break;
                    
                
            
        );
    

为more info

【讨论】:

以上是关于在不使用 Play Services API 的情况下启用位置/GPS 设置的主要内容,如果未能解决你的问题,请参考以下文章

google play services location api有时会给出错误的位置

Google Play Games Services Leaderboard API,看不到其他玩家的分数

通过 Google Play Services API 将会员卡添加到 Google Pay

如何通过 Play Games Services Publishing API 为成就或排行榜项目添加新的本地化

是否可以在不安装 Google Play 游戏应用程序的情况下使用 Android 排行榜?

在库模块中使用 Google Play Services Gradle 插件