如何从将服务扩展到 MainActivity 的 LocationServices 活动传递纬度 n 经度值以在屏幕上显示它们而不是 Log.d

Posted

技术标签:

【中文标题】如何从将服务扩展到 MainActivity 的 LocationServices 活动传递纬度 n 经度值以在屏幕上显示它们而不是 Log.d【英文标题】:How to pass latitude n longitude values from LocationServices activity which extends Service to MainActivity to display them onscreen instead of Log.d 【发布时间】:2021-09-22 06:42:06 【问题描述】:

LocationService中的代码extends服务活动是这样的:

private LocationCallback locationCallback = new LocationCallback() 
    @Override
    public void onLocationResult(LocationResult locationResult) 
        super.onLocationResult(locationResult);
        if(locationResult != null && locationResult.getLastLocation() != null) 
            double latitude = locationResult.getLastLocation().getLatitude();
            double longitude = locationResult.getLastLocation().getLongitude();
            Log.d("LOCATION_UPDATE","\nLat: "+ latitude +"\nLon: "+ longitude);
        
    
;

MainActivity extends AppCompatActivity 活动中调用按钮点击活动的代码是:

findViewById(R.id.buttonStartLocationUpdates).setOnClickListener(new View.OnClickListener() 
        @Override
        public void onClick(View v) 
            if(ContextCompat.checkSelfPermission(getApplicationContext(), Manifest.permission.ACCESS_FINE_LOCATION) !=
                    PackageManager.PERMISSION_GRANTED) 
                ActivityCompat.requestPermissions(MainActivity.this,
                        new String[] Manifest.permission.ACCESS_FINE_LOCATION,
                        REQUEST_CODE_LOCATION_PERMISSION);
             else 
                startLocationService();     
            
        
    );

我有 2 个 id 为 latView 和 lonView 的 TexViews 来显示纬度和经度。 这个想法是显示我们从 LocationService 获得的更新纬度和经度,以便在单击开始按钮时显示。 我是android新手,似乎无法正确理解。请帮忙!提前致谢。

【问题讨论】:

【参考方案1】:

一个简单的方法是

    将locationCallback移到MainActivity,这样就可以访问TextView了,你可以轻松写

    textView1.text = "$纬度"

    为startLocation服务创建参数,如

    startLocationService(LocationCallback)

然后您可以将 locationCallback 传递给服务。

不确定是否在 ui 线程中调用了位置回调。如果没有,您将需要致电

runOnUiThread 
  textView1.text = "$latitude"

所以这将全部在 MainActivity 中:

private LocationCallback locationCallback = new LocationCallback() 
    @Override
    public void onLocationResult(LocationResult locationResult) 
        super.onLocationResult(locationResult);
        if(locationResult != null && locationResult.getLastLocation() != null) 
            double latitude = locationResult.getLastLocation().getLatitude();
            double longitude = locationResult.getLastLocation().getLongitude();
            textView1.setText("" + latitude);
            textView2.setText("" + longtitude);
        
    
;

....

startLocationService(locationCallback);

【讨论】:

嗯,你能告诉我如何实现它吗?我似乎无法让它工作。 “runOnUiThread 是在 MainActivity 还是 LocationService 活动下?

以上是关于如何从将服务扩展到 MainActivity 的 LocationServices 活动传递纬度 n 经度值以在屏幕上显示它们而不是 Log.d的主要内容,如果未能解决你的问题,请参考以下文章

为啥我不能从将一个列表附加到另一个列表中获取元素

如何在 Spring 中从将外键作为长属性引用的 json 创建模型?

如何在 Android 的 MainActivity 中暂停/播放背景音乐?

如何在 Android 中扩展 Button 类?

我的 findViewById 不适用于“MainActivity 扩展 FragmentActivity”

如何在MainActivity类中调用非活动类?