当前位置: 首页 > 知识库问答 >
问题:

使用GoogleApiClient LocationServices不更新

胡越
2023-03-14

我只是想做一个简单的“教程”应用程序来获取我手机的位置(学习如何在其他应用程序中使用它),但我哪儿也没得到。

>

  • Android Developer的教程:首先,我按照教程在Android的开发者站点(developer.android.com/training/location/receive-location-updates.html)。

    正如这里所指出的,我使用了Location、LocationClient和LocationRequest,在onCreate中初始化(并设置)它们。LocationClient在onStart和onStop中已连接和断开连接。

    我在连接后请求位置更新(在onConnect中)。我验证GooglePlayServices是可用的之前,打这个电话,我仍然没有得到任何更新"onLocationChanged"。

    GoogleAppClient:我注意到LocationClient已被弃用,LocationServices是首选(developer.android.com/reference/com/google/android/gms/location/LocationClient.html)。

    如图所示:https://developer.android.com/reference/com/google/android/gms/location/FusedLocationProviderApi.html,我使用一个GoogleAppClient并将其设置为LocationServices(也是https://stackoverflow.com/a/25013850/3802589).所以我把它全部设置为使用这个,但是我仍然没有得到关于这个位置的任何更新。

    onLocationChanged如果有响应,它应该打印出来。我还放了一个按钮,打印位置或“无”。

    我用谷歌地图检查了一下,看看我是否有问题,但它工作得很好。

    build.gradle

    dependencies {
        compile fileTree(dir: 'libs', include: ['*.jar'])
        compile 'com.google.android.gms:play-services:5.0.77'
        compile "com.android.support:support-v4:20.0.+"
    }
    

    清单

    ...
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
    ...
    <meta-data android:name="com.google.android.gms.version"
                android:value="@integer/google_play_services_version" />
    ...
    

    密码

    public class MyActivity extends Activity  implements
            GoogleApiClient.ConnectionCallbacks,
            GoogleApiClient.OnConnectionFailedListener,
            LocationListener {
    
        private GoogleApiClient mLocationClient;
        private Location mCurrentLocation;
        LocationRequest mLocationRequest;
    
        ...
        /* Constant fields - request interval */
        ...
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_my);
    
            mLocationClient = new GoogleApiClient.Builder(getApplicationContext())
                                    .addApi(LocationServices.API)
                                    .addConnectionCallbacks(this)
                                    .addOnConnectionFailedListener(this)
                                     .build();
    
            mLocationRequest = new LocationRequest();
            mLocationRequest.setInterval(UPDATE_INTERVAL);
            mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
    
            mLocationRequest.setFastestInterval(FASTEST_INTERVAL);
    
        }
    
        @Override
        protected void onStart() {
            super.onStart();
            mLocationClient.connect();
        }
    
        @Override
        protected void onStop() {
            super.onStop();
    
            LocationServices.FusedLocationApi.removeLocationUpdates(mLocationClient, this);
    
            mLocationClient.disconnect();
        }
    
        public void onClick(View view) {
    
            if (mCurrentLocation != null) {
                Log.i("Location", mCurrentLocation.toString());
            } else {
                Log.i("Location", "nothing");
            }
    
        }
    
        @Override
        public void onLocationChanged(Location location) {
            Log.d("Location Update", "CHANGED");
            mCurrentLocation = location;
        }
    
        @Override
        public void onConnected(Bundle bundle) {
            // Display the connection status
            Toast.makeText(this, "Connected", Toast.LENGTH_SHORT).show();
            if(servicesConnected()) {
                LocationServices.FusedLocationApi.requestLocationUpdates(mLocationClient, mLocationRequest, this);
            }
        }
    
        @Override
        public void onConnectionSuspended(int i) {
            Toast.makeText(this, "Disconnected. Please re-connect.",
                    Toast.LENGTH_SHORT).show();
        }
    

    逻辑猫

    8948-8948/example.android.com.test D/Location Updates﹕ Google Play services is available.
    8948-8948/example.android.com.test I/Location﹕ nothing
    

    我觉得我可能忘记了一些非常简单的事情。。。但我就是看不见,我花了太多时间试图找到一个简单的位置。。。

    我可以用android.locationAPI但是...这很难(据说更容易),这让我很困扰。

  • 共有2个答案

    上官淮晨
    2023-03-14

    三个回调:

    public void onConnectionFailed(ConnectionResult arg0){}
    public void onConnected(Bundle bundle){}
    public void onConnectionSuspended(int arg0){}
    

    必须执行。但是,我没有看到onConnectionFail被重写。在这种情况下,编译器应该给出了一个错误。有两个LocationListener实现,一个用于LocationListener,另一个gms.location.LocationListener。您可能需要检查是否使用gms版本。

    我希望谷歌将他们的培训样本代码更新到新的客户机模型,并消除进一步的混乱。

    景英杰
    2023-03-14

    错误只是wifi没有打开。。。我没有意识到。

    至于GregM所说的,如果我是正确的,那就是旧的API(大多数API现在已经被弃用了),正如开发者网站上所说的那样(https://developer.android.com/google/auth/api-client.html)您必须使用GoogleAppClient,如我的原始问题所示(回调也是如此)。

     类似资料:
    • 我正在尝试使用此查询更新一些记录,这基本上只是一种为客户设置“状态”的方法,考虑到他们“自上次订单以来的日子”: 但是我得到了: 错误代码: 1175年。您正在使用安全更新模式,并且您尝试更新不使用使用 KEY 列的 WHERE 的表 要禁用安全模式,请切换首选项中的选项 - 我在最终 中使用表键, 是表键。使用 不是一个选项。我还尝试使用 (我想我看到了曙光,但是没有),得到一个< code>P

    • 我痛苦了3天。我正在使用兼容性库中的视图分页程序。我已经成功地让它显示了几个视图。我的问题是,当我交换视图时,不会在它的回收器视图中按片段更新数据。但当我关闭应用程序时,打开碎片会按回收器视图显示更新内容。我使用了所有方法,如setnotifydatachanged()和许多其他方法,但viewpager中的片段不更新内容。感谢所有的帮助,这是我的主要活动

    • 问题内容: 这里的PLUNKR示例 我正在使用某种形式的jquery autocomplete作为angularjs direcitve。当jquery使用angular 更新输入的值时,直到下一个摘要(我想)之后才注意到更改。 我的第一个想法是使用来对后摘要执行操作,但是如您所见,它没有帮助。 我的第二种方法是重写该元素的功能以触发事件,但是我没有设法使其起作用。 尝试从自动完成列表中选择一个值

    • 问题内容: 这是我的HTML: 当我在框中输入内容时,该模型会通过2向绑定机制进行更新。甜。 但是, 当我通过JQuery执行此操作时… 它不会更新模型。为什么? 问题答案: Angular不知道这种变化。为此,您应该在以下位置致电或进行更改: 看到这个以更好地了解 脏检查 更新 :这是一个示例

    • 问题内容: 我有一个上面带有Web表单的网页。该表单已预填充了SQL Server数据库中的数据。用户可以进入并编辑任何字段,然后单击底部的“保存”按钮以更新数据库中的记录。由于某种原因,当我将表格预先填充数据时,update语句不会更新数据库中的记录。如果我删除了页面加载方法上预先填写表单的代码,则update语句将按预期工作。当我在页面加载方法中用数据预先填充表单时,update语句似乎正在使

    • 问题内容: 我已经阅读了一些有关我的问题的信息,但仍然没有得到正确的答案。我尝试了.on()方法仍然无法正常工作。我正在使用Laravel。 JS 加载页面后,我想要的所有东西都可以正常工作,但是当我使用replaceWith()方法更新元素,然后onclick无法正常工作时。 我检查了更新的html和属性,所有这些都在正确的位置。 问题答案: 您需要使用事件委托:- 因此更改::- 至::- 所