`

关于近段时间Android学习的一些感想

阅读更多
    很久没有写博客了,也算应胡哥的要求,更多的是对最这段时间自己的学习和生活的一个回顾和总结吧,无关技术。
    想想自己这段时间,特别是最近这几天,确实是有点过于放松了。感觉总是不在状态,好像慢慢地没有了刚来公司时那种冲劲,那么的毅然决然。胡哥的这次博客要求,也算给自己提了个醒吧。不管怎么样,坚持下去,才有机会,不能刚刚有点起步,就开始松懈,我确实该要醒悟。就像乌拉多恩的歌曲《鸟人》里写的那样,要么飞,要么坠落,这是生命的规则!
    虽然无关技术,既然说到了Android,也就说说这段时间Android的学习吧。
    一开始开始接触Android,是因为赵欢老师的《ARM体系结构与编程》的课程设计,要求我们做个开发项目。在这之前,我想我连菜鸟都算不上,简直是一穷二白,什么都不会。只剩下2个星期的时候,我们(我和另一个同学组成一个项目小组)决定做个基于Android平台的关于GPS的百度地图小项目。做之前,我们连Android工程都还不会建。花了一个星期,各种百度,各种看视频、查资料,总算是把开发环境搭建好,学会了第一个Android工程:《Hello World!》,大概了解到了,一个Android工程,到底包括那些工程文件,哪些文件有什么作用,勉强算是入了门。然后又花了一个星期,我的同学负责界面以及功能的设计,我负责敲代码实现,每天从上午10点开始,到晚上9点,除了吃饭时间,基本就是坐在电脑前,各种百度,要实现一个什么样的功能,不会?百度!运行程序出问题了?百度!总之就是不断的尝试以及各种百度中,慢慢的拼凑成了一个“项目”!
   不管它的功能多么的不完善,不管它多么的不像是个真正的项目,但是,两个星期,从不会到有所了解,从无到有,它真的就诞生在了我们的手上!我的同学给它起了个名字:无花果!象征着我们整个项目开发的过程:没有开花就结果!
    现在回想起那几天,不管我们是多么的菜,多么的不懂技术,但是有了一个明确的目标,有了来自课程的压力,那种一往无前的冲劲,不管是多么的横冲直撞,我们总算是做了出来,不管结果是多么的不专业,不管结果是多么的不堪入目,起码,这是一个从无到有的开始,这是一颗无花果!
    今天算是给自己提个醒吧。加油,我能做到!
    (代码和文档就当是留念了)
网络检查以及百度map的key验证
public class XwhgApplication extends Application {
	
    private static XwhgApplication mInstance = null;
    public boolean m_bKeyRight = true;
    BMapManager mBMapManager = null;

    public static final String strKey = "A7Lb6Mo0veE04SS9321lX8c9";
	
	@Override
    public void onCreate() {
	    super.onCreate();
		mInstance = this;
		initEngineManager(this);
	}
	
	public void initEngineManager(Context context) {
        if (mBMapManager == null) {
            mBMapManager = new BMapManager(context);
        }

        if (!mBMapManager.init(strKey,new MyGeneralListener())) {
            Toast.makeText(XwhgApplication.getInstance().getApplicationContext(), 
                    "BMapManager  初始化错误!", Toast.LENGTH_LONG).show();
        }
	}
	
	public static XwhgApplication getInstance() {
		return mInstance;
	}
	
	
	// 常用事件监听,用来处理通常的网络错误,授权验证错误等
    static class MyGeneralListener implements MKGeneralListener {
        
        @Override
        public void onGetNetworkState(int iError) {
            if (iError == MKEvent.ERROR_NETWORK_CONNECT) {
                Toast.makeText(XwhgApplication.getInstance().getApplicationContext(), "您的网络出错啦!",
                    Toast.LENGTH_LONG).show();
            }
            else if (iError == MKEvent.ERROR_NETWORK_DATA) {
                Toast.makeText(XwhgApplication.getInstance().getApplicationContext(), "输入正确的检索条件!",
                        Toast.LENGTH_LONG).show();
            }
            // ...
        }

        @Override
        public void onGetPermissionState(int iError) {
        	//非零值表示key验证未通过
            if (iError != 0) {
                //授权Key错误:
                Toast.makeText(XwhgApplication.getInstance().getApplicationContext(), 
                        "请在 DemoApplication.java文件输入正确的授权Key,并检查您的网络连接是否正常!error: "+iError, Toast.LENGTH_LONG).show();
                XwhgApplication.getInstance().m_bKeyRight = false;
            }
            else{
            	XwhgApplication.getInstance().m_bKeyRight = true;
            	Toast.makeText(XwhgApplication.getInstance().getApplicationContext(), 
                        "key认证成功", Toast.LENGTH_LONG).show();
            }
        }
    }
}


百度map的Bitmap创建
public class XwhgBMapUtil {
    	
	/**
	 * @param view
	 * @return
	 */
	public static Bitmap getBitmapFromView(View view) {
        view.destroyDrawingCache();
        view.measure(View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED),
                View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED));
        view.layout(0, 0, view.getMeasuredWidth(), view.getMeasuredHeight());
        view.setDrawingCacheEnabled(true);
        Bitmap bitmap = view.getDrawingCache(true);
        return bitmap;
	}
}



登录界面模块
public class LoadingActivity extends Activity {
    private ImageView welcomeImg = null;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.loadingui);
        welcomeImg = (ImageView) this.findViewById(R.id.loadding);
        AlphaAnimation anima = new AlphaAnimation(0.3f, 1.0f);
        anima.setDuration(5000);// 设置动画显示时间
        welcomeImg.startAnimation(anima);
        anima.setAnimationListener(new AnimationImpl());

    }

    private class AnimationImpl implements AnimationListener {

        @Override
        public void onAnimationStart(Animation animation) {
            welcomeImg.setBackgroundResource(R.drawable.load);
        }

        @Override
        public void onAnimationEnd(Animation animation) {
            skip(); // 动画结束后跳转到别的页面
        }

        @Override
        public void onAnimationRepeat(Animation animation) {

        }

    }

    private void skip() {
        startActivity(new Intent(this, MainActivity.class));
        finish();
    }
}

布局文件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
    <ImageView 
        android:id="@+id/loadding"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="1"/>
</LinearLayout>


主界面部分
public class MainActivity extends Activity {

	private MapView mMapView = null;
	private MapController mMapController = null;
	OverlayTest itemOverlay;
	private TextView  popupText = null;
	private View viewCache = null;
	private View popupInfo = null;
	private OverlayItem mCurItem = null;
	private PopupOverlay   pop  = null;
	private boolean flag = false;
	LocationManager manager;
	Location location;
	
	Button self;
	Button friend;
	Button satellite;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
        //从Android 2.3开始提供了一个新的类StrictMode,可以帮助开发者改进他们的Android应用
		//StrictMode可以用于捕捉发生在应用程序主线程中耗时的磁盘、网络访问或函数调用,可以帮助开发者使其改进程序,
		//使主线程处理UI和动画在磁盘读写和网络操作时变得更平滑,避免主线程被阻塞,导致ANR窗口的发生。
		//代码在Application的OnCreate中添加,这样就能在程序启动的最初一刻进行监控了
        StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()
        .detectDiskReads()
        .detectDiskWrites()
        .detectNetwork() // 这里可以替换为detectAll() 就包括了磁盘读写和网络I/O
        .penaltyLog() //打印logcat,当然也可以定位到dropbox,通过文件保存相应的log
        .build());
        StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()
        .detectLeakedSqlLiteObjects() //探测SQLite数据库操作
        .penaltyLog() //打印logcat
        .penaltyDeath()
        .build()); 
		super.onCreate(savedInstanceState);
		/**
         * 使用地图sdk前需先初始化BMapManager.
         * BMapManager是全局的,可为多个MapView共用,它需要地图模块创建前创建,
         * 并在地图地图模块销毁后销毁,只要还有地图模块在使用,BMapManager就不应该销毁
         */
        XwhgApplication app = (XwhgApplication)this.getApplication();
        if (app.mBMapManager == null) {
            app.mBMapManager = new BMapManager(this);
            /**
             * 如果BMapManager没有初始化则初始化BMapManager
             */
            app.mBMapManager.init(XwhgApplication.strKey,new XwhgApplication.MyGeneralListener());
        }
        /**
          * 由于MapView在setContentView()中初始化,所以它需要在BMapManager初始化之后
          */
        setContentView(R.layout.activity_main);
        mMapView = (MapView)findViewById(R.id.bmapView);
        /**
         * 获取地图控制器
         */
        mMapController = mMapView.getController();
        /**
         *  设置地图是否响应点击事件  .
         */
        mMapController.enableClick(true);
        /**
         * 设置地图缩放级别
         */
        mMapController.setZoom(14);
        /**
         * 显示内置缩放控件
         */
        mMapView.setBuiltInZoomControls(true);
      
        drawgpspoint();
		/**
         * 设定地图中心点
         */
        Drawable mark_st = getResources().getDrawable(R.drawable.icon_st);
        GeoPoint p = new GeoPoint((int)(28.182091 * 1E6), (int)(112.938917* 1E6));
        OverlayItem item = new OverlayItem(p, "起点", "中心点");
		item.setMarker(mark_st);
		//使用setMarker()方法设置overlay图片,如果不设置则使用构建ItemizedOverlay时的默认设置
		//创建IteminizedOverlay
		itemOverlay = new OverlayTest(mark_st, mMapView);
		//将IteminizedOverlay添加到MapView中
		//添加overlay, 当批量添加Overlay时使用addItem(List<OverlayItem>)效率更高
		itemOverlay.addItem(item);
		/**
		 * 将itemOverlay添加到地图中
		 */
		mMapView.getOverlays().clear();
		mMapView.getOverlays().add(itemOverlay);
		mMapView.refresh();
        
        mMapController.setCenter(p);
        
        self = (Button)findViewById(R.id.self);
        friend = (Button)findViewById(R.id.friend);
        satellite = (Button)findViewById(R.id.satellite);
        self.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View arg0) {
				// TODO Auto-generated method stub
				mMapView.refresh();
			}
		});
        
        friend.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View arg0) {
				// TODO Auto-generated method stub
				
				Intent intent = new Intent();
				intent.setClass(MainActivity.this, SetTimeActivity.class);
				startActivity(intent);
				
				
			}
		});
        
        satellite.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View arg0) {
				// TODO Auto-generated method stub
				if(flag==false){
					mMapView.setSatellite(true);
					flag = true;
				}else{
					mMapView.setSatellite(false);
					flag = false;
				}
			}
		});
	}
	
	
	private void drawgpspoint(){
		manager = (LocationManager)getSystemService(LOCATION_SERVICE);
		location = manager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
		//监测GPS位置信息的变化
		manager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 5*1000, 10, new LocationListener() {
			
			@Override
			public void onStatusChanged(String provider, int status, Bundle extras) {
				// TODO Auto-generated method stub
				
			}
			
			@Override
			public void onProviderEnabled(String provider) {
				// TODO Auto-generated method stub
				UpdateOverlay(manager.getLastKnownLocation(provider));
			}
			
			@Override
			public void onProviderDisabled(String provider) {
				// TODO Auto-generated method stub
				UpdateOverlay(null);
			}
			
			@Override
			public void onLocationChanged(Location location) {
				// TODO Auto-generated method stub
				UpdateOverlay(location);
			}
		});
		
	}
	private void UpdateOverlay(Location location){
		if(location == null){
			return ;
		}
		Time t = new Time();
		t.setToNow();
		String year = t.year+"";
		String month = t.month+"";
		String date = t.monthDay+"";
		String hour = t.hour+"";
		String minute = t.minute+"";
		String second = t.second+"";
		String speed = location.getSpeed()+"";
		String info = year+"-"+month+"-"+date+"T"+hour+":"+minute+":"+second+"速度"+speed;
		double mLat = location.getLatitude();
		double mLon = location.getLongitude();
		// 用给定的经纬度构造GeoPoint,单位是微度 (度 * 1E6)
		GeoPoint p = new GeoPoint((int) (mLat * 1E6), (int) (mLon * 1E6));
		//准备overlay图像数据,根据实情情况修复
				Drawable mark= getResources().getDrawable(R.drawable.nav_turn_via_1);
				//用OverlayItem准备Overlay数据
				OverlayItem item = new OverlayItem(p, info, "中心点");
				item.setMarker(mark);
				//使用setMarker()方法设置overlay图片,如果不设置则使用构建ItemizedOverlay时的默认设置
				//创建IteminizedOverlay
				itemOverlay = new OverlayTest(mark, mMapView);
				//将IteminizedOverlay添加到MapView中
				//添加overlay, 当批量添加Overlay时使用addItem(List<OverlayItem>)效率更高
				itemOverlay.addItem(item);
				/**
				 * 将itemOverlay添加到地图中
				 */
				mMapView.getOverlays().clear();
				mMapView.getOverlays().add(itemOverlay);
				mMapView.refresh();
				/**
				 * 想地图添加自定义view
				 */
				viewCache = getLayoutInflater().inflate(R.layout.showinfo, null);
		         popupInfo = (View) viewCache.findViewById(R.id.popinfo);
		         popupText =(TextView) viewCache.findViewById(R.id.textcache);
		         
		         /**
		          * 创建一个popupoverlay
		          */
		         PopupClickListener popListener = new PopupClickListener(){
					@Override
					public void onClickedPopup(int index) {
						if ( index == 0){
							//更新item位置
						      pop.hidePop();
						      GeoPoint p = new GeoPoint(mCurItem.getPoint().getLatitudeE6()+5000,
						    		  mCurItem.getPoint().getLongitudeE6()+5000);
						      mCurItem.setGeoPoint(p);
						      itemOverlay.updateItem(mCurItem);
						      mMapView.refresh();
						}
						else if(index == 2){
							//更新图标
							mCurItem.setMarker(getResources().getDrawable(R.drawable.nav_turn_via_1));
							itemOverlay.updateItem(mCurItem);
						    mMapView.refresh();
						}
					}
		         };
		         pop = new PopupOverlay(mMapView,popListener);
				
				//删除overlay .
				//itemOverlay.removeItem(itemOverlay.getItem(0));
				//mMapView.refresh();
				//清除overlay
				// itemOverlay.removeAll();
				// mMapView.refresh();
				sendSensorValue(6319,9813,location);
		
		
	}
	 protected void onPause() {
	    	/**
	    	 *  MapView的生命周期与Activity同步,当activity挂起时需调用MapView.onPause()
	    	 */
	        mMapView.onPause();
	        super.onPause();
	    }
	    
	    @Override
	    protected void onResume() {
	    	/**
	    	 *  MapView的生命周期与Activity同步,当activity恢复时需调用MapView.onResume()
	    	 */
	        mMapView.onResume();
	        super.onResume();
	    }
	    
	    @Override
	    protected void onDestroy() {
	    	/**
	    	 *  MapView的生命周期与Activity同步,当activity销毁时需调用MapView.destroy()
	    	 */
	        mMapView.destroy();
	        super.onDestroy();
	    }
	    
	    @Override
	    protected void onSaveInstanceState(Bundle outState) {
	    	super.onSaveInstanceState(outState);
	    	mMapView.onSaveInstanceState(outState);
	    	
	    }
	    
	    @Override
	    protected void onRestoreInstanceState(Bundle savedInstanceState) {
	    	super.onRestoreInstanceState(savedInstanceState);
	    	mMapView.onRestoreInstanceState(savedInstanceState);
	    }
	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}
	private void sendSensorValue(int deviceId,int sensorId,Location location)
	{
	        String site = "http://api.yeelink.net/";
	        System.out.println("try to send sensor value");
	        String siteUrl = site + "v1.0/device/"+deviceId+"/sensor/"+sensorId+"/datapoints";
	            try {
	                    URL url = new URL(siteUrl);  
	                    HttpURLConnection conn = (HttpURLConnection) url.openConnection();  
	                     
	                    conn.setRequestMethod("POST");  
	                    conn.setRequestProperty("Connection", "close");  
	                    conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); 
	                    conn.setRequestProperty("U-ApiKey", "43b1c73f20849635cc4a1e350c59012a");  //replace your api key here
	                    conn.setRequestProperty("Accept", "*/*");  
	                    conn.connect();  
	                    OutputStream out = conn.getOutputStream();
	                    String value = "{\"value\":{\"lat\":"+location.getLatitude()+",\"lng\":"+location.getLongitude()+",\"speed\":"+location.getSpeed()+",\"offset\":\"yes\"}}";
	                    out.write(value.getBytes());
	                    out.flush();
	                    InputStream stream = conn.getInputStream();  
	                    byte[] data=new byte[102400];  
	                    int length=stream.read(data);  
	                    conn.disconnect();  
	                    stream.close();  
	            
	            } catch (IOException e) {
	                    e.printStackTrace();
	            }
		}
	
	/*
	 * 要处理overlay点击事件时需要继承ItemizedOverlay
	 * 不处理点击事件时可直接生成ItemizedOverlay.
	 */
	class OverlayTest extends ItemizedOverlay<OverlayItem> {
	    //用MapView构造ItemizedOverlay
	    public OverlayTest(Drawable mark,MapView mapView){
	            super(mark,mapView);
	    }
	    protected boolean onTap(int index) {
	        //在此处理item点击事件
	    	OverlayItem item = getItem(index);
			mCurItem = item ;
			
			   popupText.setText(getItem(index).getTitle());
			   Bitmap[] bitMaps={
				    XwhgBMapUtil.getBitmapFromView(popupInfo)		
			    };
			    pop.showPopup(bitMaps,item.getPoint(),32);
			
	        return true;
	    }
	        public boolean onTap(GeoPoint pt, MapView mapView){
	                //在此处理MapView的点击事件,当返回 true时
	        	if (pop != null){
	                pop.hidePop();               
				}
	                return false;
	        }
	       
	}        
}

布局文件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
    <LinearLayout 
    android:orientation="horizontal"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content">
       
      <Button
        android:id="@+id/self"
        android:layout_height="fill_parent"
        android:layout_width="fill_parent"
        android:layout_weight="1"
        android:layout_marginLeft="2dip"
		android:layout_marginRight="2dip"
		android:layout_marginTop="2dip"
		android:layout_marginBottom="2dip"
        android:background="@drawable/button_style"
        android:onClick="clearOverlay"
        android:padding="10dip"
        android:text="自己(self)" />
      <Button
        android:id="@+id/friend"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_weight="1"
        android:layout_marginLeft="2dip"
		android:layout_marginRight="2dip"
		android:layout_marginTop="2dip"
		android:layout_marginBottom="2dip"
        android:background="@drawable/button_style"
        android:onClick="resetOverlay"
        android:text="朋友(friend)" />
      <Button
        android:id="@+id/satellite"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_weight="1"
        android:layout_marginLeft="2dip"
		android:layout_marginRight="2dip"
		android:layout_marginTop="2dip"
		android:layout_marginBottom="2dip"
        android:background="@drawable/button_style"
        android:onClick="resetOverlay"
        android:text="卫星图(satellite)" />
      
        
    </LinearLayout>
  
    <com.baidu.mapapi.map.MapView android:id="@+id/bmapView"
	    android:layout_width="fill_parent" android:layout_height="fill_parent" 
	    android:clickable="true"     
	/>
</LinearLayout>

时间设置部分
public class SetTimeActivity extends Activity{
	
	Button sure;
	Button cancle;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.set_time_main);
		
		
		sure = (Button)findViewById(R.id.sure);
		cancle = (Button)findViewById(R.id.cancle);
		
		sure.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View arg0) {
				// TODO Auto-generated method stub
				Intent intent = new Intent();
				intent.setClass(SetTimeActivity.this, FriendActivity.class);
				startActivity(intent);
			}
		});
		
		cancle.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				finish();
			}
		});
	}

}

布局文件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="@drawable/green"
    android:orientation="vertical"
    >
    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_margin="5dp"
        android:orientation="horizontal"> 
        <TextView
            android:id="@+id/start"
            android:layout_height="wrap_content"
            android:layout_width="wrap_content"
            android:text="起始时间" >
        </TextView>
        <EditText 
             android:id="@+id/start_time"
             android:layout_height="wrap_content"
             android:layout_width="290px"
             android:background="@drawable/button_on"
             android:text="2013-12-20T14:00:00">
        </EditText>
    </LinearLayout>
    
    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_margin="5dp"
        android:orientation="horizontal"> 
        <TextView
            android:id="@+id/end"
            android:layout_height="wrap_content"
            android:layout_width="wrap_content"
            android:text="截止时间" >
        </TextView>
        <EditText 
             android:id="@+id/end_time"
             android:layout_height="wrap_content"
             android:layout_width="290px"
             android:background="@drawable/button_on"
             android:text="2013-12-21T12:00:00">
        </EditText>
    </LinearLayout>
    <LinearLayout 
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"> 
        <TextView
            android:id="@+id/device"
            android:layout_height="wrap_content"
            android:layout_width="wrap_content"
            android:layout_weight="1"
            android:text="设备ID" >
        </TextView>
        <EditText 
             android:id="@+id/deviceid"
             android:layout_height="wrap_content"
             android:layout_width="wrap_content"
             android:layout_weight="1"
             android:text="6790">
        </EditText>
        
        <TextView
            android:id="@+id/sensorid"
            android:layout_height="wrap_content"
            android:layout_width="wrap_content"
            android:layout_weight="1"
            android:text="传感器ID" >
        </TextView>
        <EditText 
             android:id="@+id/sensor"
             android:layout_height="wrap_content"
             android:layout_width="wrap_content"
             android:layout_weight="1"
             android:text="10530">
        </EditText>
        
    </LinearLayout>
	<LinearLayout 
	    android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:gravity="right"
        android:orientation="horizontal">
	    <Button
       	 	android:id="@+id/sure"
        	android:layout_width="wrap_content"
        	android:layout_height="wrap_content"
        	android:background="@drawable/confirm"
       		>
		</Button>
    	<Button
        	android:id="@+id/cancle"
        	android:layout_width="wrap_content"
        	android:layout_height="wrap_content"
        	android:background="@drawable/cancel" >
	    </Button>
	    </LinearLayout>
    
</LinearLayout>



Friend部分
public class FriendActivity extends Activity{

	private MapView mMapView = null;
	private MapController mMapController = null;
	OverlayTest itemOverlay;
	private TextView  popupText = null;
	private View viewCache = null;
	private View popupInfo = null;
	private OverlayItem mCurItem = null;
	private PopupOverlay   pop  = null;
	
	private String day1;
	private String speed1;
	private String lat1;
	private String lng1;
	
	ArrayList<String> date = new ArrayList<String>();
    ArrayList<String> speed = new ArrayList<String>();
    ArrayList<Double> lat=new ArrayList<Double>();
    ArrayList<Double> lng=new ArrayList<Double>();
	
	private int deviceId = 6319;
	private int sensorId = 9813;
	private int j = 0;
	private Button back;
	
	private Thread newThread;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		/**
         * 使用地图sdk前需先初始化BMapManager.
         * BMapManager是全局的,可为多个MapView共用,它需要地图模块创建前创建,
         * 并在地图地图模块销毁后销毁,只要还有地图模块在使用,BMapManager就不应该销毁
         */
        XwhgApplication app = (XwhgApplication)this.getApplication();
        if (app.mBMapManager == null) {
            app.mBMapManager = new BMapManager(this);
            /**
             * 如果BMapManager没有初始化则初始化BMapManager
             */
            app.mBMapManager.init(XwhgApplication.strKey,new XwhgApplication.MyGeneralListener());
        }
        /**
          * 由于MapView在setContentView()中初始化,所以它需要在BMapManager初始化之后
          */
		setContentView(R.layout.friend);
		mMapView = (MapView)findViewById(R.id.bmapView);
		back = (Button)findViewById(R.id.back);
		back.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View arg0) {
				// TODO Auto-generated method stub
				finish();
			}
		});
        /**
         * 获取地图控制器
         */
        mMapController = mMapView.getController();
        /**
         *  设置地图是否响应点击事件  .
         */
        mMapController.enableClick(true);
        /**
         * 设置地图缩放级别
         */
        mMapController.setZoom(14);
        /**
         * 显示内置缩放控件
         */
        mMapView.setBuiltInZoomControls(true);
		/**
         * 设定地图中心点
         */
        Drawable mark_st = getResources().getDrawable(R.drawable.icon_st);
        GeoPoint p = new GeoPoint((int)(28.182091 * 1E6), (int)(112.938917* 1E6));
        OverlayItem item = new OverlayItem(p, "起点", "中心点");
		item.setMarker(mark_st);
		//使用setMarker()方法设置overlay图片,如果不设置则使用构建ItemizedOverlay时的默认设置
		//创建IteminizedOverlay
		itemOverlay = new OverlayTest(mark_st, mMapView);
		//将IteminizedOverlay添加到MapView中
		//添加overlay, 当批量添加Overlay时使用addItem(List<OverlayItem>)效率更高
		itemOverlay.addItem(item);
		/**
		 * 将itemOverlay添加到地图中
		 */
		mMapView.getOverlays().clear();
		mMapView.getOverlays().add(itemOverlay);
		mMapView.refresh();
        
		/**
		 * 想地图添加自定义view
		 */
		viewCache = getLayoutInflater().inflate(R.layout.showinfo, null);
         popupInfo = (View) viewCache.findViewById(R.id.popinfo);
         popupText =(TextView) viewCache.findViewById(R.id.textcache);
         
         /**
          * 创建一个popupoverlay
          */
         PopupClickListener popListener = new PopupClickListener(){
			@Override
			public void onClickedPopup(int index) {
				if ( index == 0){
					//更新item位置
				      pop.hidePop();
				      GeoPoint p = new GeoPoint(mCurItem.getPoint().getLatitudeE6()+5000,
				    		  mCurItem.getPoint().getLongitudeE6()+5000);
				      mCurItem.setGeoPoint(p);
				      itemOverlay.updateItem(mCurItem);
				      mMapView.refresh();
				}
				else if(index == 2){
					//更新图标
					mCurItem.setMarker(getResources().getDrawable(R.drawable.nav_turn_via_1));
					itemOverlay.updateItem(mCurItem);
				    mMapView.refresh();
				}
			}
         };
         pop = new PopupOverlay(mMapView,popListener);
		
        mMapController.setCenter(p);
        
        getSensorValue(6319,9813);
	}
	
	private void drawgpspoint(){
		
	}
	
	private void getSensorValue(int deviceId,int sensorId)
	{
	        String site = "http://api.yeelink.net/";
	        String startday = "2013-12-02T14:01:46";
	        String endday = "2013-12-3T20:21:40";
	        String site2 = "start="+startday+"&end="+endday+"&interval=30&page=1";
	        System.out.println("try to get sensor value");
	        String siteUrl = site + "v1.0/device/"+deviceId+"/sensor/"+sensorId+".json?"+site2;
	            try {
	                    URL url = new URL(siteUrl);  
	                    HttpURLConnection conn = (HttpURLConnection) url.openConnection();  
	                     
	                    conn.setRequestMethod("GET");  
	                    conn.setRequestProperty("Connection", "close");  
	                    conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); 
	                    conn.setRequestProperty("U-ApiKey", "43b1c73f20849635cc4a1e350c59012a");  //replace your api key here
	                    conn.setRequestProperty("Accept", "*/*");  
	                    conn.connect();  
	                    InputStream stream = conn.getInputStream();  
	                    BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(stream));
	                    String sCurrentLine = "";   
	                    String sTotalString = "";
	                    while ((sCurrentLine = bufferedReader.readLine()) != null) {   
	                        sTotalString += sCurrentLine + "\n";   
	                    } 
	                    
	                    String temp = sTotalString;
	                    JiexiString(temp);
	                    System.out.println(temp);
	                    
	                    String[] resulte = new String[20];
	                    int i=0;
	                    while(temp.indexOf("}}")!=-1){
	                   	 int k = temp.indexOf("}}");
	                   	 int j = temp.indexOf("{");
	                   	 resulte[i++] = temp.substring(j+1,k);
	                   	 temp = temp.substring(k+1);
	                    }
	                    
	                    
	                    i=0;
	                    String t;
	                    while(resulte[i]!=null){
	                   	 System.out.println("reslte"+"--"+i+"--"+resulte[i]);
	                   	 String s = resulte[i];
	                   	 int a = resulte[i].indexOf(":")+2;
	                        int b = resulte[i].indexOf(",")-1;
	                   	 t= s.substring(a, b);
	                   	 date.add(t);
	                   	 
	                   	 a= resulte[i].indexOf("lat")+5;
	                        b= resulte[i].indexOf("lng")-2;
	                   	 t=s.substring(a, b);
	                   	 double tem = Double.parseDouble(t);
	                   	 lat.add(tem);
	                   	 
	                   	 a= resulte[i].indexOf("lng")+5;
	                        b= resulte[i].indexOf("speed")-2;
	                   	 t=s.substring(a, b);
	                   	 tem = Double.parseDouble(t);
	                   	 lng.add(tem);
	                   	 
	                   	 a= resulte[i].indexOf("speed")+7;
	                        b= resulte[i].indexOf("offset")-2;
	                        t=s.substring(a, b);
	                        speed.add(t);
	                        
	                   	 i++;
	                    }
	                    temp = resulte[i-1];
	                    int a = resulte[i-1].indexOf(":")+2;
	                    int b = resulte[i-1].indexOf(",")-1;
	                    day1 = temp.substring(a,b);
	                    a= resulte[i-1].indexOf("lat")+5;
	                    b= resulte[i-1].indexOf("lng")-2;
	                    lat1 = resulte[i-1].substring(a,b);
	                    a= resulte[i-1].indexOf("lng")+5;
	                    b= resulte[i-1].indexOf("speed")-2;
	                    lng1 = resulte[i-1].substring(a,b);
	                    
	                    a= resulte[i-1].indexOf("speed")+7;
	                    b= resulte[i-1].indexOf("offset")-2;
	                    speed1 = resulte[i-1].substring(a,b);
	                    
	                    conn.disconnect();  
	                    stream.close();  
	            System.out.println("day="+day1+"  "+"lat="+lat1+"  "+"lng="+lng1+"  "+"speed"+speed1);
	            double la = Double.parseDouble(lat1);
	            double ln = Double.parseDouble(lng1);
	            
	            Drawable mark = getResources().getDrawable(R.drawable.icon_st);
	            Drawable mark_test = getResources().getDrawable(R.drawable.icon_marka);
	            for(j=0;j<lat.size();j++){
						GeoPoint test = new GeoPoint((int)(lat.get(j)*1E6),(int)(lng.get(j)*1E6));
				        OverlayItem item = new OverlayItem(test,date.get(j), "");
				        item.setMarker(mark_test);
				        itemOverlay.addItem(item);
					    /**
					    * 将itemOverlay添加到地图中
					    */
					    mMapView.getOverlays().clear();
					    mMapView.getOverlays().add(itemOverlay);
					    mMapView.refresh();
					    mMapController.setCenter(test);
	            }
	            
	            GeoPoint p = new GeoPoint((int)(la * 1E6), (int)(ln* 1E6));
	            OverlayItem item = new OverlayItem(p, "起点", "中心点");
	    		item.setMarker(mark);
	    		//使用setMarker()方法设置overlay图片,如果不设置则使用构建ItemizedOverlay时的默认设置
	    		//创建IteminizedOverlay
	    		//itemOverlay = new OverlayTest(mark, mMapView);
	    		//将IteminizedOverlay添加到MapView中
	    		//添加overlay, 当批量添加Overlay时使用addItem(List<OverlayItem>)效率更高
	    		itemOverlay.addItem(item);
	    		/**
	    		 * 将itemOverlay添加到地图中
	    		 */
	    		mMapView.getOverlays().clear();
	    		mMapView.getOverlays().add(itemOverlay);
	    		mMapView.refresh();
	            
	            mMapController.setCenter(p);
	            
	            } catch (IOException e) {
	                    // TODO Auto-generated catch block
	                    e.printStackTrace();
	            }
	}
	private void JiexiString(String s){
		
		
		
	}
	
	protected void onPause() {
    	/**
    	 *  MapView的生命周期与Activity同步,当activity挂起时需调用MapView.onPause()
    	 */
        mMapView.onPause();
        super.onPause();
    }
    
    @Override
    protected void onResume() {
    	/**
    	 *  MapView的生命周期与Activity同步,当activity恢复时需调用MapView.onResume()
    	 */
        mMapView.onResume();
        super.onResume();
    }
    
    @Override
    protected void onDestroy() {
    	/**
    	 *  MapView的生命周期与Activity同步,当activity销毁时需调用MapView.destroy()
    	 */
        mMapView.destroy();
        super.onDestroy();
    }
    
    @Override
    protected void onSaveInstanceState(Bundle outState) {
    	super.onSaveInstanceState(outState);
    	mMapView.onSaveInstanceState(outState);
    	
    }
    
    @Override
    protected void onRestoreInstanceState(Bundle savedInstanceState) {
    	super.onRestoreInstanceState(savedInstanceState);
    	mMapView.onRestoreInstanceState(savedInstanceState);
    }
	/**
	 * 要处理overlay点击事件时需要继承ItemizedOverlay
	 * 不处理点击事件时可直接生成ItemizedOverlay.
	 */
	class OverlayTest extends ItemizedOverlay<OverlayItem> {
	    //用MapView构造ItemizedOverlay
	    public OverlayTest(Drawable mark,MapView mapView){
	            super(mark,mapView);
	    }
	    protected boolean onTap(int index) {
	        //在此处理item点击事件
	    	OverlayItem item = getItem(index);
			mCurItem = item ;
			
			   popupText.setText(getItem(index).getTitle());
			   Bitmap[] bitMaps={
				    XwhgBMapUtil.getBitmapFromView(popupInfo)		
			    };
			    pop.showPopup(bitMaps,item.getPoint(),32);
			
	        return true;
	    }
	        public boolean onTap(GeoPoint pt, MapView mapView){
	                //在此处理MapView的点击事件,当返回 true时
	        	if (pop != null){
	                pop.hidePop();               
				}
	                return false;
	        }
	       
	}
	

}

布局文件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
    <LinearLayout 
	    android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:gravity="right"
        android:orientation="horizontal">
	    <Button
        android:id="@+id/back"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@drawable/button_style"
        android:text="返回" />
	    </LinearLayout>
    
  <com.baidu.mapapi.map.MapView android:id="@+id/bmapView"
	    android:layout_width="fill_parent" android:layout_height="fill_parent" 
	    android:clickable="true"     
	/>
    
</LinearLayout>

还有一个自定义弹框的布局文件
<?xml version="1.0" encoding="utf-8"?>

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
	    android:orientation="horizontal"
	    android:layout_width="wrap_content"
	    android:layout_height="wrap_content"
	    >

     <LinearLayout 
	    android:layout_width="wrap_content"
	    android:layout_height="wrap_content"
	    android:orientation="vertical"
	    android:id="@+id/popinfo"
	    >
	    
    <TextView
        android:id="@+id/textcache"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@drawable/popup_middle"
        android:gravity="center"
        android:textStyle="bold"
        android:textColor="@android:color/black"
        android:textSize="12sp"
        android:text="显示信息" />
    
     <TextView
        android:id="@+id/popdown"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:background="@drawable/popup_down"
        android:textColor="@android:color/black"
        android:textSize="12sp" />

    </LinearLayout>
</LinearLayout>

分享到:
评论
1 楼 flycatdeng 2014-02-14  
贴那么长的代码,小心胡哥看了批评你,,,

相关推荐

    关于webOS坠落的一些感想.docx

    关于WebOS的坠落,我们可以从多个角度进行深入分析,探讨这一操作系统为何未能在激烈的市场竞争中立足。WebOS,作为Palm公司推出的一款创新移动操作系统,曾被寄予厚望,但在惠普(HP)接手后,却走向了终结。 首先...

    嵌入式开发学习心得感想.pdf

    如果专注于特定平台,如手机开发,那么可能还需要学习MTK、Symbian、Android等平台的开发知识。 总的来说,嵌入式开发的学习是一个由浅入深、理论与实践相结合的过程。从基础知识到具体操作,再到应用开发,每个...

    嵌入式Android综合实验报告

    【嵌入式Android综合实验报告】 本实验报告主要围绕一个基于...总结,这个嵌入式Android实验是一个有效的教学手段,帮助学生建立起从理论到实践的桥梁,为他们未来在Android领域的深入学习和职业发展打下坚实基础。

    Android-PutMeDown是一款计时记录app

    这些图表可能包括累计使用时间、不同类型活动的占比、达成特定目标的次数等,直观地反映出用户在不同时间段的使用习惯。这种视觉化的反馈机制能够激励用户设定并达成自我改进的目标,形成良好的时间管理习惯。 在...

    对Java程序设计的感想.doc

    首先,Java 的学习需要投入时间和精力。Java 作为一种严谨的计算机语言,语法规范严谨,要求开发者具有清晰的逻辑思维。在学习过程中,课前预习和课后复习至关重要,这是巩固知识的有效方式。同时,实际编写代码是...

    关于疫情期间在家上网课的学生感想作文5篇.pdf

    3. **移动设备与软件应用**:学生使用电脑、平板或手机等移动设备接收并参与网课,这涉及到各种学习软件的使用,如Zoom、腾讯课堂、钉钉等,以及操作系统(如iOS、Android、Windows)的交互体验。 4. **数字教育...

    android阅读器v0.03

    【Android阅读器v0.03】是一款专为Android平台设计的电子书阅读应用程序,旨在为用户提供便捷的阅读体验。然而,根据描述,该程序可能存在一些问题,可能并不如预期般理想,因此用户在下载和使用时需要谨慎考虑。这...

    android 电子书

    以下是关于CoolReader的一些核心特性: 1. **多格式支持**:CoolReader的文件格式兼容性广泛,让用户无需担心电子书的格式问题,可以轻松打开和阅读各种类型的电子书。 2. **自定义阅读体验**:用户可以根据个人...

    Android FBReaderJ电子书阅读器.zip

    FBReaderJ是一款专门为Android平台设计的开源电子书阅读器,其名称源于它的原生版本FBReader,是一款在多个操作系统上广泛使用的阅读软件。本压缩包“Android FBReaderJ电子书阅读器.zip”包含了该应用的相关文件,...

    Android手机软件开发设计说明书.pdf

    此外,菜单功能提供了日志分类、类型筛选、感想记录、设置选项、关于信息和退出应用的功能。 **2. 系统实现** 系统设计采用了面向对象的架构,通过类的结构图来组织各个组件。在实现上,个人日志显示和添加功能有...

    Android 高仿QQ 沉浸式状态栏

    在进入今天正题前,还是老样子先谈谈感想吧,最近感觉整个都失去了方向感,好迷茫!找工作又失败了,难道Android真的饱和了?这两天我一直没出门,除了下楼哪外卖就是宅宿舍了,静想了许久,我还是不能忘了初心,我...

    基于Android的“嗨帮”APP设计.pdf

    《基于Android的“嗨帮”APP设计》 随着现代社会的快速发展,人们的生活节奏日益加快,时间变得尤为宝贵。为了在繁忙的生活中保持高效,越来越多的人开始依赖于各种应用程序(APP)。市面上的APP种类繁多,涵盖了...

    基于android的阅读软件App设计-开题报告.docx

    其中,Android因其开放性和灵活性,在全球范围内拥有广泛的用户基础,这也为基于Android平台的应用程序开发提供了广阔的空间。 ##### 选题依据与意义 在移动互联网时代,信息获取方式发生了巨大变化,传统的纸质...

    英语单词 和 随心记

    记事本功能可能允许用户记录与单词学习相关的笔记,例如新学的短语、例句或者自己的感想,以此增强记忆。而记账本功能则可能与学习投入有关,例如追踪购买教材、参加课程的花费,帮助用户规划学习预算。 "单词"标签...

Global site tag (gtag.js) - Google Analytics