Android 开发中百度地图运行一段时间地图轨迹不更新的问题

                                   百度地图轨迹不更新问题

         百度地图手机版v.0.8.7在我们系统中运行一段时间后就会出现左侧导航页面正常运行,但是整个地图页面的轨迹不进行更新了。概率出现很大。后来找到了规律,只要将百度地图置于后台,再重新进入百度地图应用则地图可以继续正常更新导航轨迹了。基于以上问题描述,那么我们可以给出以下解决这个不刷新问题的思路及方法:
         1:地图处于后台后重新进入百度地图即可恢复不刷新的轨迹,那么我们猜想可能是在onResume()函数中,百度地图做了地图初始化或者地图刷新的动作。
         2:我们可以用以下两种方法实现步骤1所描述的解决方法,
              a.百度地图应用在前台时,定时发送出启动百度地图的广播;
              b.百度地图应用在前台时,定时弹出一个透明窗体,以让百度地图执行后台到前台的状态变化,达到更新百度地图轨迹的目的。
         

package com.example.broadcasttest;


import java.util.List;


import android.app.ActivityManager;
import android.app.ActivityManager.RunningTaskInfo;
import android.app.Service;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.os.Handler;
import android.os.IBinder;
import android.util.Log;


public class SendService extends Service {
private Context mContext;
private Handler mHandler = new Handler();


@Override
public IBinder onBind(Intent intent) {
Log.e("djj", "onBind SendService Test!");
return null;
}


@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.e("djj", "onStartCommand SendService Test!");


// return super.onStartCommand(intent, flags, startId);
return START_STICKY;


}


private Runnable sendRunnable = new Runnable() {


public void run() {
// launcherBaiduNavi();//方法一
                        launcherTransparentActivity();//方法二
mHandler.postDelayed(sendRunnable, 60000);


}
};


/**
* 判断当前应用程序处于前台还是后台
*/
public static boolean isApplicationToForground(final Context context) {
ActivityManager am = (ActivityManager) context
.getSystemService(Context.ACTIVITY_SERVICE);
List tasks = am.getRunningTasks(1);
if (!tasks.isEmpty()) {
ComponentName topActivity = tasks.get(0).topActivity;
if (topActivity.getPackageName().equals("com.baidu.navi.hd")) {
Log.d("djj",
"baidunavi is in forground, force to refresh!topActivity.getPackageName()="
+ topActivity.getPackageName());
return true;
} else {
Log.d("djj",
"topActivity.getPackageName()="
+ topActivity.getPackageName());
}
}
Log.d("djj", "baidunavi is in background!");
return false;
}


@Override
public void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
}


@Override
public void onCreate() {
// TODO Auto-generated method stub
super.onCreate();
Log.e("djj", "onCreate SendService Test!");


mContext = this;
mHandler.postDelayed(sendRunnable, 60000);
}

/***启动透明窗体应用方法二***/
private void launcherTransparentActivity() {
if (isApplicationToForground(mContext)) {
Intent intent = new Intent(SendService.this,TransparentActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
mContext.startActivity(intent);

}
         private void launcherBaiduNavi() {
if (isApplicationToForground(mContext)) {
try {/**启动百度地图方法一**/
 Uri uri=Uri.parse("bdnavi://launch?src=yourAppIdentifier");
Intent intent=new Intent("com.baidu.navi.action.START",uri);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
mContext.startActivity(intent);
Log.e("djj","@@@@@@@@@@@@@@@@@@@@send intent to launch baidunv!") ;
 } catch (Exception e) {
 e.printStackTrace();
 }

}





}

你可能感兴趣的:(Android疑难杂症)