1. 程式人生 > >百度地圖軌跡(Andriod SDK)

百度地圖軌跡(Andriod SDK)

專案結構

在這裡插入圖片描述

BaseActivity.java

package siso.track.activity;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.LinearLayout;
import android.widget.TextView;

import siso.track.R;


public abstract class BaseActivity extends Activity {

    @Override
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(getContentViewId()); } /** * 獲取佈局檔案ID */ protected abstract int getContentViewId(); /** * 設定Activity標題 */ public void setTitle(int resId)
{ LinearLayout layout = (LinearLayout) findViewById(R.id.layout_top); TextView textView = (TextView) layout.findViewById(R.id.tv_activity_title); textView.setText(resId); } /** * 設定點選監聽器 */ public void setOnClickListener(View.OnClickListener listener) { LinearLayout layout =
(LinearLayout) findViewById(R.id.layout_top); LinearLayout optionsButton = (LinearLayout) layout.findViewById(R.id.btn_activity_options); optionsButton.setOnClickListener(listener); } /** * 不顯示設定按鈕 */ public void setOptionsButtonInVisible() { LinearLayout layout = (LinearLayout) findViewById(R.id.layout_top); LinearLayout optionsButton = (LinearLayout) layout.findViewById(R.id.btn_activity_options); optionsButton.setVisibility(View.INVISIBLE); } /** * 回退事件 */ public void onBack(View v) { super.onBackPressed(); } @Override protected void onStart() { super.onStart(); } @Override protected void onResume() { super.onResume(); } @Override protected void onPause() { super.onPause(); } @Override protected void onStop() { super.onStop(); } @Override protected void onRestart() { super.onRestart(); } @Override protected void onDestroy() { super.onDestroy(); } }

MainActivity.java

package siso.track.activity;

import android.Manifest;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.SharedPreferences;
import android.content.pm.PackageManager;
import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

import com.baidu.mapapi.SDKInitializer;
import com.baidu.trace.LBSTraceClient;
import com.baidu.trace.Trace;
import com.baidu.trace.api.entity.LocRequest;
import com.baidu.trace.api.entity.OnEntityListener;
import com.baidu.trace.model.OnTraceListener;
import com.baidu.trace.model.PushMessage;
import com.baidu.trace.model.TraceLocation;

import siso.track.utils.BitmapUtil;
import siso.track.R;
import siso.track.TrackApplication;


import java.util.ArrayList;
import java.util.List;

public class MainActivity extends BaseActivity {

    private TrackApplication trackApp;

    private SDKReceiver mReceiver;

    /**
     * 構造廣播監聽類,監聽 SDK key 驗證以及網路異常廣播
     */
    public class SDKReceiver extends BroadcastReceiver {

        public void onReceive(Context context, Intent intent) {
            String s = intent.getAction();

            if (s.equals(SDKInitializer.SDK_BROADTCAST_ACTION_STRING_PERMISSION_CHECK_ERROR)) {
                Toast.makeText(MainActivity.this,"apikey驗證失敗,地圖功能無法正常使用",Toast.LENGTH_SHORT).show();
            } else if (s.equals(SDKInitializer.SDK_BROADTCAST_ACTION_STRING_PERMISSION_CHECK_OK)) {
                Toast.makeText(MainActivity.this,"apikey驗證成功",Toast.LENGTH_SHORT).show();
            } else if (s.equals(SDKInitializer.SDK_BROADCAST_ACTION_STRING_NETWORK_ERROR)) {
                Toast.makeText(MainActivity.this,"網路錯誤",Toast.LENGTH_SHORT).show();
            }
        }
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // apikey的授權需要一定的時間,在授權成功之前地圖相關操作會出現異常;apikey授權成功後會傳送廣播通知,我們這裡註冊 SDK 廣播監聽者
        IntentFilter iFilter = new IntentFilter();
        iFilter.addAction(SDKInitializer.SDK_BROADTCAST_ACTION_STRING_PERMISSION_CHECK_OK);
        iFilter.addAction(SDKInitializer.SDK_BROADTCAST_ACTION_STRING_PERMISSION_CHECK_ERROR);
        iFilter.addAction(SDKInitializer.SDK_BROADCAST_ACTION_STRING_NETWORK_ERROR);
        mReceiver = new SDKReceiver();
        registerReceiver(mReceiver, iFilter);

        init();
        siso.track.utils.BitmapUtil.init();
    }

    private void init() {
        trackApp = (TrackApplication) getApplicationContext();

        Button trace = (Button) findViewById(R.id.btn_trace);
        Button query = (Button) findViewById(R.id.btn_query);

        trace.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(MainActivity.this, TracingActivity.class);
                startActivity(intent);
            }
        });

        query.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(MainActivity.this,TrackQueryActivity.class);
                startActivity(intent);
            }
        });
    }

    @Override
    protected void onStart() {
        super.onStart();
        // 適配android M,檢查許可權
        List<String> permissions = new ArrayList<>();
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && isNeedRequestPermissions(permissions)) {
            requestPermissions(permissions.toArray(new String[permissions.size()]), 0);
        }
    }

    @Override
    protected int getContentViewId() {
        return R.layout.activity_main;
    }

    private boolean isNeedRequestPermissions(List<String> permissions) {
        // 定位精確位置
        addPermission(permissions, Manifest.permission.ACCESS_FINE_LOCATION);
        // 儲存許可權
        addPermission(permissions, Manifest.permission.WRITE_EXTERNAL_STORAGE);
        // 讀取手機狀態
        addPermission(permissions, Manifest.permission.READ_PHONE_STATE);
        return permissions.size() > 0;
    }

    private void addPermission(List<String> permissionsList, String permission) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M
                && checkSelfPermission(permission) != PackageManager.PERMISSION_GRANTED) {
            permissionsList.add(permission);
        }
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();

        unregisterReceiver(mReceiver);

        if (trackApp.trackConf.contains("is_trace_started")
                && trackApp.trackConf.getBoolean("is_trace_started", true)) {
            // 退出app停止軌跡服務時,不再接收回調,將OnTraceListener置空
            trackApp.mClient.setOnTraceListener(null);
            trackApp.mClient.stopTrace(trackApp.mTrace, null);
            trackApp.mClient.clear();
        } else {
            trackApp.mClient.clear();
        }
        trackApp.isTraceStarted = false;
        trackApp.isGatherStarted = false;
        SharedPreferences.Editor editor = trackApp.trackConf.edit();
        editor.remove("is_trace_started");
        editor.remove("is_gather_started");
        editor.apply();

        BitmapUtil.clear();
    }
}

TracingActivity.java

package siso.track.activity;

import android.app.NotificationManager;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.SharedPreferences;
import android.content.SyncStatusObserver;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.os.PowerManager;
import android.provider.Settings;
import android.support.v4.content.ContextCompat;
import android.support.v4.content.res.ResourcesCompat;
import android.view.View;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;

import com.baidu.mapapi.common.SysOSUtil;
import com.baidu.mapapi.map.MapView;
import com.baidu.mapapi.map.MyLocationData;
import com.baidu.mapapi.model.LatLng;
import com.baidu.trace.api.entity.OnEntityListener;
import com.baidu.trace.api.track.HistoryTrackRequest;
import com.baidu.trace.api.track.HistoryTrackResponse;
import com.baidu.trace.api.track.LatestPoint;
import com.baidu.trace.api.track.LatestPointResponse;
import com.baidu.trace.api.track.OnTrackListener;
import com.baidu.trace.api.track.SupplementMode;
import com.baidu.trace.api.track.TrackPoint;
import com.baidu.trace.model.CoordType;
import com.baidu.trace.model.LocationMode;
import com.baidu.trace.model.OnTraceListener;
import com.baidu.trace.model.ProcessOption;
import com.baidu.trace.model.PushMessage;
import com.baidu.trace.model.SortType;
import com.baidu.trace.model.StatusCodes;
import com.baidu.trace.model.TraceLocation;
import com.baidu.trace.model.TransportMode;

import siso.track.utils.CommonUtil;
import siso.track.utils.Constants;
import siso.track.utils.MapUtil;
import siso.track.utils.TrackReceiver;
import siso.track.utils.ViewUtil;
import siso.track.R;
import siso.track.TrackApplication;
import siso.track.model.CurrentLocation;

import java.util.ArrayList;
import java.util.List;

import siso.track.activity.BaseActivity;

/**
 * 軌跡時時追蹤
 * Created by zhh
 */
public class TracingActivity extends BaseActivity implements View.OnClickListener, SensorEventListener {

    private TrackApplication trackApp = null;

    private ViewUtil viewUtil = null;

    private Button traceBtn = null;

    private Button gatherBtn = null;

    private PowerManager powerManager = null;

    private PowerManager.WakeLock wakeLock = null;

    private TrackReceiver trackReceiver = null;

    private SensorManager mSensorManager;

    private Double lastX = 0.0;
    private int mCurrentDirection = 0;

    /**
     * 地圖工具
     */
    private MapUtil mapUtil = null;

    /**
     * 軌跡服務監聽器
     */
    private OnTraceListener traceListener = null;

    /**
     * 軌跡監聽器(用於接收糾偏後實時位置回撥)
     */
    private OnTrackListener trackListener = null;

    /**
     * Entity監聽器(用於接收實時定位回撥)
     */
    private OnEntityListener entityListener = null;

    /**
     * 實時定位任務
     */
    private RealTimeHandler realTimeHandler = new RealTimeHandler();

    private RealTimeLocRunnable realTimeLocRunnable = null;

    /**
     * 打包週期
     */
    public int packInterval = Constants.DEFAULT_PACK_INTERVAL;

    /**
     * 軌跡點集合
     */
    private List<LatLng> trackPoints;

    private boolean firstLocate = true;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setTitle(R.string.tracing_title);
        setOptionsText();
        setOnClickListener(this);
        init();
    }

    public void setOptionsText() {
        LinearLayout layout = (LinearLayout) findViewById(R.id.layout_top);
        TextView textView = (TextView) layout.findViewById(R.id.tv_options);
        textView.setText("軌跡追蹤設定");
    }

    private void init() {
        initListener();
        trackApp = (TrackApplication) getApplicationContext();
        viewUtil = new ViewUtil();
        mapUtil = MapUtil.getInstance();
        mapUtil.init((MapView) 
            
           

相關推薦

地圖軌跡(Andriod SDK)

專案結構 BaseActivity.java package siso.track.activity; import android.app.Activity; import android.os.Bundle; import android.view.View; impor

地圖軌跡

 function guigui(){      //alert("fdhkj");       // 百度地圖定義中心點     map.centerAndZoom(new BMap.Point(116.404, 39.915), 15);     // 百度地圖滾輪可縮放

地圖API Android SDK 常見問題

1 使用須知在使用百度地圖SDK(Android版)之前,請仔細閱讀使用條款,一旦您使用了百度地圖SDK(Android版),即表明您已閱讀並接受使用條款中的全部內容。百度地圖SDK(Android版)可幫助您在應用中以豐富的形式展示地圖,實現興趣點搜尋、線路規劃等操作。 您只可使用在百度地圖SDK(Andr

android 地圖軌跡回放

android百度地圖實現軌跡回放,就需要用PolylineOptions畫線作為軌跡效果,和新增覆蓋物移動就可以了 package baidumapsdk.demo; import java.util.ArrayList; import java.util.L

ios 地圖軌跡回放一點心得

由於專案需要,需要通過百度地圖sdk實現軌跡回放。 使用一個非常簡單的辦法來實現軌跡回放。 話不多說,出來吧,程式碼君。 1,使用的是BMKPointAnnotation。 @interface TrackMapViewController (){ BMKPoint

地圖軌跡回放,自定義路書,邊走邊畫線

var arrPois=[new BMap.Point(116.403984,39.914004),new BMap.Point(116.402116,39.913938),new BMap.Point(116.402116,39.913938),new BMap.Point(116.402046,39.91

地圖api android sdk leaked ServiceConnection com.baidu.location.LocationClient錯誤

最近在百度地圖api 的android sdk , 下載了官方的例子執行,一切正常,然後參照定點陣圖層寫了個程式一執行,出現了以下錯誤: 03-29 15:36:52.300: E/ActivityThread(6484): Activity com.gif.activ

第三方SDK地圖(二)定位 + 鷹眼軌跡

#1 基礎地圖 + 基礎定位# 可以看到地圖的介面。 如圖: Menu: <menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app

基於地圖SDK和Elasticsearch GEO查詢的地理圍欄分析系統(3)-前端實現

方便 復制 類型 復制代碼 自動跳轉 rar 窗口 stack delete 轉載自:http://www.cnblogs.com/Auyuer/p/8086975.html MoonLight可視化訂單需求區域分析系統實現功能:   在現實生活中,計算機和互聯網迅速發展,

地圖sdk使用

maps ase 一體化 class lib sdk map 申請 系統 1.android開發百度地圖定位,我怎麽老是定到幾內亞灣 權限問題,首先安卓6.0之後的Android的系統需要動態申請權限。 然後百度地圖的sdk的不同功能,申請的權限不同,每個功能都需要看官方文

地圖sdk sha1秘鑰獲取有種想吐的趕腳

src andro files inf com admin oid file http 擼代碼坐的腰算背疼還只是弄一個不是項目裏邊需要的升級版本的so 日 需要sha1 指紋秘鑰,還有項目包, 才能用百度地圖sdk 這個找sha1 獲取廢了20分鐘, 顯示全盤找keyt

iOS·採用第三方(地圖SDK)實現定位等功能開發

 陳滿iOS  關注 2017.05.01 01:06* 字數 2212 閱讀 6818評論 7喜歡 133 1.申請金鑰 首先,申請一個baidu賬號,接著進入新建金鑰入口申請成為baidu地圖開發者,填寫相關開發者資訊和簡訊驗證碼。接

android studio使用SDK開發地圖應用中遇到的問題彙總

1、com.baidu.mapapi.map.MapView (Open Class, Show Exception, Clear Cache) The following classes could not be instantiated:    

地圖開發之——地圖鷹眼軌跡管理臺DEMO-v3部署到伺服器上

百度地圖開發官方下載口:https://github.com/baidu-openmap-trace/web-demo-v3 第一:部署準備 搭建NPM和FIS3的環境 1、安裝node.js:https://nodejs.org/en/ 點選版本下載,然後就安裝

android 接入地圖sdk

專案需求: 接入地圖 定位位置 設定百度地圖上的各種圖示 載入方格的問題 接入地圖 1.建立應用 接入的是百度地圖,首先去百度地圖開放平臺上新增應用。在http://lbsyun.baidu.com/apicon

qt與js互動,並在地圖上繪製軌跡

前言: 獲得了照片的GPS資訊後,我們現在要做的就是把GPS資訊傳入JS中,然後通過百度地圖API將軌跡繪製出來。 一:在程式頁面載入地圖 qt5.6及之後取消了QWebkits,轉為使用QWebEngine. 在qt5.6的額ui設計師介面中,並不能直

如何讓高德/地圖sdk直接可執行在真機上

       或許大家都有遇到過在百度地圖或者是高德地圖上註冊key簽名時放置到自己的manifest中,會發現直接執行真機是會無效(地圖無法顯示/無法定位),一定要另外打包才可現實相關三方資訊,比如地圖的顯示。在這做個筆記,剛好解決了這個問題,今天要講的

地圖SDK配置與使用

在配置百度地圖 SDK 和使用時,發現官網上的教程並不是那麼好用,而且容易出現定位回撥裡 BDLocation.getLocType() == 162 這個問題,官網只是說 SO 配置出現異常,並沒有明確問題所在;如果你也遇到了,請點這個連結:BDLocation.getLocType() == 1

地圖SDK整合定位,衛星地圖

其中兩種整合方式基本相同 1.百度地圖第三方SDK的開放平臺建立應用 2.下載官方的SDK 3.複製到專案的libs目錄下 4.但這樣工程並不會自動載入libs下的so檔案,需配置so檔案的路徑為該libs路徑,關聯所有地圖SDK的so檔案 App下的groud.build的

mui使用地圖sdk及定位方法

一、使用前配置:參考http://ask.dcloud.net.cn/article/29        注意事項:     (1)HBuilder預設打包使用的簽名為"BA:AD:09:3A:82:82:9F: