在 Android Studio 中每 10 秒显示一次位置

Posted

技术标签:

【中文标题】在 Android Studio 中每 10 秒显示一次位置【英文标题】:Show location every 10 seconds in Android Studio 【发布时间】:2019-09-28 08:11:41 【问题描述】:

我正在做一个应用程序,其中位置每 10 秒出现在地图上的不同位置,但不好的是它对我不起作用,当我运行程序时,我看到所有位置都已经到位.但我希望每 10 秒一个一个地放置,就好像它们在移动一样。 这是我的代码:

    @Override
    public void onMapReady(GoogleMap googleMap) 
    mMap = googleMap;
    for ( contador=1;contador<=10;contador++) 

            final long EXECUTION_TIME = 10000;
            handler.postDelayed(new Runnable() 

            @Override
            public void run() 

               handler.postDelayed(this, EXECUTION_TIME);
            
        , EXECUTION_TIME);

        mMap.addMarker(new MarkerOptions().position(obtenerLatLong(contador)).title("Mi Hogar").snippet("Municipio").icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_CYAN)));
        mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(obtenerLatLong(contador), 17));

    

有什么办法吗?

【问题讨论】:

【参考方案1】:

您的处理程序除了启动其他处理程序之外什么都不做,您必须在run() 内调用addMarkermoveCamera,并在run() 结束时启动下一个postDelayed。您可以使用 int 进行计数并查看您在循环中的位置,并仅在此 int 小于 10 时启动另一个处理程序。(这里我使用 cpt 来执行此操作)

final long EXECUTION_TIME = 10000;
final Handler handler = new Handler();

handler.postDelayed(new Runnable() 
    int cpt = 1;
    @Override
    public void run() 
        /* old
        * mMap.addMarker(new MarkerOptions().position(obtenerLatLong(contador)).title("Mi Hogar").snippet("Municipio").icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_CYAN)));
        * mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(obtenerLatLong(contador), 17));
        */
        //new
        mMap.addMarker(new MarkerOptions().position(obtenerLatLong(cpt)).title("Mi Hogar").snippet("Municipio").icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_CYAN)));
        mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(obtenerLatLong(cpt), 17));

        cpt++;
        if(cpt <= 10)
            handler.postDelayed(this, EXECUTION_TIME);
    
, EXECUTION_TIME);

【讨论】:

我把它和你一样,只留下一次。我试图把它放在一个while循环中,这样我就可以标记其余的但什么也不做。我要你拨 10 次,但只标记第一次 我(我不确定你想要什么,如果你只想移动相机 10 次,只需将 addMarker 调用放在处理程序之外,顺便说一下我没有更新它但您可能希望我的cpt 变量为countador,所以当您调用obtenerLatLong() 时,它实际上是从1 循环到10 是的,cpt 就像一个计数器,每转一圈都会在地图上显示一个新的标记。只是在添加 while 循环时,它会立即对我执行所有操作,就好像它不尊重每个标记的 10 秒时间。 我编辑了我的代码以在任何地方使用cpt,试试吧,不要把它放在while循环中【参考方案2】:

这将起作用尝试它:

final long EXECUTION_TIME = 10000;
final Handler handler = new Handler();
handler.postDelayed(new Runnable() 
int i=0;
  @Override
  public void run() 
    i=i+1;
    mMap.addMarker(new MarkerOptions().position(obtenerLatLong(contador)).title("Mi Hogar").snippet("Municipio").icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_CYAN)));
    mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(obtenerLatLong(contador), 17));
    if(i==10)
       handler.removeCallbacks(this);
    
 
, EXECUTION_TIME);

【讨论】:

但是我怎么知道我是否执行了 10 次?我认为需要一个循环,就像我在问题中一样。 int i=0; // 这被认为是循环执行了 10 次。 if(i==10) // 检查循环是否执行了 10 次,然后通过调用 -> handler.removeCallbacks(this); 删除循环; 尝试根据您的情况进行更改,它会起作用。如果遇到任何问题,请告诉我。 我把它和你一样,只留下一次。我试图把它放在一个while循环中,这样我就可以标记其余的但什么都不做。

以上是关于在 Android Studio 中每 10 秒显示一次位置的主要内容,如果未能解决你的问题,请参考以下文章

在 Android 中每 10 秒显示一次数据

Android - 复选框在列表视图中每 10 次重复一次

常用Linux命令

如何在android中的ble中每5秒更新一次电池电量

android studio更新gradle在哪个目录下

无法在 Windows 10 上卸载 Android Studio