Преглед изворни кода

1.修改Android Apex Mobile Service Location定位。

Pen Li пре 8 година
родитељ
комит
9ee6b483f3

+ 10 - 0
Apex Mobile/app/src/main/AndroidManifest.xml

@@ -303,6 +303,16 @@
             android:name=".ApexBackgroundService"
             android:label="Apex Mobile Background Service" />
 
+        <service
+            android:name="com.baidu.location.f"
+            android:enabled="true"
+            android:process=":remote" >
+            <intent-filter>
+                <action android:name="com.baidu.location.service_v2.2" >
+                </action>
+            </intent-filter>
+        </service>
+
         <activity
             android:name=".saved.CheckSavedActivity"
             android:screenOrientation="portrait"

+ 76 - 4
Apex Mobile/app/src/main/java/com/usai/apex/BaiduMapFragment.java

@@ -14,9 +14,10 @@ import org.json.JSONObject;
 //import baidumapsdk.demo.R;
 
 
-
-
-
+import com.baidu.location.BDLocation;
+import com.baidu.location.BDLocationListener;
+import com.baidu.location.LocationClient;
+import com.baidu.location.LocationClientOption;
 import com.baidu.mapapi.BMapManager;
 import com.baidu.mapapi.SDKInitializer;
 import com.baidu.mapapi.map.BaiduMap.OnMapClickListener;
@@ -36,6 +37,7 @@ import com.baidu.mapapi.map.MarkerOptions;
 //import com.baidu.mapapi.map.OverlayItem;
 //import com.baidu.mapapi.map.PopupClickListener;
 //import com.baidu.mapapi.map.PopupOverlay;
+import com.baidu.mapapi.map.MyLocationData;
 import com.baidu.mapapi.map.SupportMapFragment;
 import com.baidu.mapapi.map.BaiduMap.OnMarkerClickListener;
 import com.baidu.mapapi.map.InfoWindow.OnInfoWindowClickListener;
@@ -43,12 +45,16 @@ import com.baidu.mapapi.model.LatLng;
 //import com.baidu.platform.comapi.basestruct.GeoPoint;
 import com.usai.util.Network;
 
+import android.Manifest;
 import android.content.Context;
 import android.content.Intent;
+import android.content.pm.PackageManager;
 import android.graphics.Bitmap;
 import android.graphics.drawable.Drawable;
+import android.location.LocationListener;
 import android.os.AsyncTask;
 import android.os.Bundle;
+import android.support.v4.app.ActivityCompat;
 import android.support.v4.app.Fragment;
 import android.support.v4.app.FragmentManager;
 import android.util.Log;
@@ -61,7 +67,7 @@ import android.widget.Button;
 import android.widget.TextView;
 import android.widget.Toast;
 
-public class BaiduMapFragment extends Fragment
+public class BaiduMapFragment extends Fragment implements BDLocationListener
 {
 	private SearchTask				m_task				= null;
 	String							fragment_content	= null;
@@ -252,6 +258,44 @@ public class BaiduMapFragment extends Fragment
 
 	}
 
+
+	private LocationClient mLocationClient;
+
+	private void initLocation() {
+		//定位客户端的设置
+		mLocationClient = new LocationClient(getContext());
+
+		//注册监听
+		mLocationClient.registerLocationListener(this);
+
+		//配置定位
+		LocationClientOption option = new LocationClientOption();
+		option.setCoorType("bd09ll");//坐标类型
+		option.setIsNeedAddress(true);//可选,设置是否需要地址信息,默认不需要
+		option.setOpenGps(true);//打开Gps
+		option.setScanSpan(1000);//1000毫秒定位一次
+		option.setIsNeedLocationPoiList(true);//可选,默认false,设置是否需要POI结果,可以在BDLocation.getPoiList里得到
+		mLocationClient.setLocOption(option);
+	}
+
+	@Override
+	public void onReceiveLocation(BDLocation bdLocation) {
+
+		//将获取的location信息给百度map
+		MyLocationData data = new MyLocationData.Builder()
+				.accuracy(bdLocation.getRadius())
+				// 此处设置开发者获取到的方向信息,顺时针0-360
+				.direction(100)
+				.latitude(bdLocation.getLatitude())
+				.longitude(bdLocation.getLongitude())
+				.build();
+
+		if (fragment != null) {
+			fragment.getMapView().getMap().setMyLocationData(data);
+		}
+
+	}
+
 	class SearchTask extends AsyncTask<Void, Void, Boolean>
 	{
 		int	errorcode;
@@ -595,6 +639,7 @@ public class BaiduMapFragment extends Fragment
 				
 
 		requestloactions();
+
 		return inflater.inflate(R.layout.fragment_service_location, container,
 				false);
 	}
@@ -618,6 +663,33 @@ public class BaiduMapFragment extends Fragment
 //		 controller.setCenter(new GeoPoint((int) ( * 1E6),
 //		 (int)  * 1E6)));
 //		 controller.setZoom(5);
+
+		if (ActivityCompat.checkSelfPermission(getActivity(), Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(getActivity(), Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
+			// TODO: Consider calling
+			//    ActivityCompat#requestPermissions
+			// here to request the missing permissions, and then overriding
+			//   public void onRequestPermissionsResult(int requestCode, String[] permissions,
+			//                                          int[] grantResults)
+			// to handle the case where the user grants the permission. See the documentation
+			// for ActivityCompat#requestPermissions for more details.
+
+		} else {
+			fragment.getMapView().getMap().setMyLocationEnabled(true);
+			initLocation();
+			if(mLocationClient != null && !mLocationClient.isStarted()){//如果定位client没有开启,开启定位
+				mLocationClient.start();
+			}
+		}
+
+	}
+
+	@Override
+	public void onPause() {
+		super.onPause();
+
+		if(mLocationClient != null && mLocationClient.isStarted()){//如果定位client开启,关闭定位
+			mLocationClient.stop();
+		}
 	}
 
 	public BaiduMarkerClickListener markerClickListener;

Разлика између датотеке није приказан због своје велике величине
+ 21 - 15
Apex Mobile/app/src/main/java/com/usai/apex/ServiceLocationFragment.java


+ 5 - 1
Apex Mobile/app/src/main/java/com/usai/apex/mainframe/TrackingListFragment.java

@@ -289,7 +289,11 @@ TrackingListSearchResult searchresult	= new TrackingListSearchResult();
 
             TrackingImageView iv_status = (TrackingImageView) convertView.findViewById(R.id.iv_status);
             iv_status.setImageResource((int)result.getData().get(position).get("icon"));
-            iv_status.setSelected(mSelectedIndex == position);
+            if (self instanceof RecentFragment) {
+                iv_status.setSelected(mSelectedIndex == position);
+            } else {
+                iv_status.setSelected(false);
+            }
 
             // new icon click
             iv_status.setOnClickListener(self);

Неке датотеке нису приказане због велике количине промена