您的位置:首页 > 移动开发 > Android开发

Android使用百度LBS SDK

2014-12-05 19:00 441 查看
类似百度应用引擎,使用百度的LBS服务,首先我们在百度开放服务平台创建一个应用,如下图:



进入应用详情,然后点击“LBS服务”,设置应用:



数字签名的获取方式,可以在Eclipse(ADT 22)中查看,Window->Preferences->Android->Build,SHA1 fingerprint就是我们需要的:



Android SDK安全码组成:数字签名+;+包名。

接着下载LBS Android SDK,然后按照百度官方文档的方法进行操作:

第一步:在工程里新建libs文件夹,将开发包里的baidumapapi_vX_X_X.jar拷贝到libs根目录下,将libBaiduMapSDK_vX_X_X.so拷贝到libs\armeabi目录下(官网demo里已有这两个文件,如果要集成到自己的工程里,就需要自己添加),拷贝完成后的工程目录如下图所示;

注:liblocSDK3.so和locSDK_3.1.jar为百度定位SDK所使用资源,开发者可根据实际需求自行添加。



第二步:在工程属性->Java Build Path->Libraries中选择“Add External JARs”,选定baidumapapi_vX_X_X.jar,确定后返回。

通过以上两步操作后,您就可以正常使用百度地图SDK为您提供的全部功能了。

注意:由于adt插件升级,若您使用Eclipse adt 22的话,需要对开发环境进行相应的设置,方法如下:

1. 在Eclipse 中选中工程,右键选 Properties->Java Build Path->Order and Export 使 Android Private Libraries处于勾选状态;

2. Project -> clean-> clean all .

然后在我们的应用中配置相关权限和Key:

(1)在application中添加开发密钥:

<application>  
    <meta-data  
        android:name="com.baidu.lbsapi.API_KEY"  
        android:value="开发者 key" />  
</application>


(2)添加所需权限

<uses-permission android:name="android.permission.GET_ACCOUNTS" />  
<uses-permission android:name="android.permission.USE_CREDENTIALS" />  
<uses-permission android:name="android.permission.MANAGE_ACCOUNTS" />  
<uses-permission android:name="android.permission.AUTHENTICATE_ACCOUNTS" />  
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />  
<uses-permission android:name="android.permission.INTERNET" />  
<uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" />  
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />  
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />  
<uses-permission android:name="android.permission.READ_PHONE_STATE" />  
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />  
<uses-permission android:name="android.permission.BROADCAST_STICKY" />  
<uses-permission android:name="android.permission.WRITE_SETTINGS" />  
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
(3)布局

<com.baidu.mapapi.map.MapView  
    android:id="@+id/bmapView"  
    android:layout_width="fill_parent"  
    android:layout_height="fill_parent"  
    android:clickable="true" />


(4)在应用程序创建时初始化 SDK引用的Context 全局变量:

public class MainActivity extends Activity {  
    @Override  
    protected void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);   
        //在使用SDK各组件之前初始化context信息,传入ApplicationContext  
        //注意该方法要再setContentView方法之前实现  
        SDKInitializer.initialize(getApplicationContext());  
        setContentView(R.layout.activity_main);  
    }  
}


(5)管理地图生命周期:

public class MainActivity extends Activity {  
    MapView mMapView = null;  
    @Override  
    protected void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);   
        //在使用SDK各组件之前初始化context信息,传入ApplicationContext  
        //注意该方法要再setContentView方法之前实现  
        SDKInitializer.initialize(getApplicationContext());  
        setContentView(R.layout.activity_main);  
        //获取地图控件引用  
        mMapView = (MapView) findViewById(R.id.bmapView);  
    }  
    @Override  
    protected void onDestroy() {  
        super.onDestroy();  
        //在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理  
        mMapView.onDestroy();  
    }  
    @Override  
    protected void onResume() {  
        super.onResume();  
        //在activity执行onResume时执行mMapView. onResume (),实现地图生命周期管理  
        mMapView.onResume();  
        }  
    @Override  
    protected void onPause() {  
        super.onPause();  
        //在activity执行onPause时执行mMapView. onPause (),实现地图生命周期管理  
        mMapView.onPause();  
        }  
    }


到这里就可以显示地图了,但是只能显示北京,并没有定位,明天总结一下定位的实现。



昨天初步接触了百度的LBS SDK,让应用可以通过MapView显示地图,今天在昨天的代码基础上,实现一下定位功能:

首先看一下效果图吧:



左下角的按钮可以切换模式,分为三种:

普通(LocationMode.NORMAL)、

跟随(LocationMode.FOLLOWING)、

罗盘(LocationMode.COMPASS),相信用过百度地图的同学对这几个模式不陌生吧。

下面是代码:

分别声明一个MapView和BaiduMap:

private MapView mMapView;
	private BaiduMap mBaiduMap;


在SetContentView之前要初始化SDK:

SDKInitializer.initialize(getApplicationContext());


更换定位图标的方法:

mCurrentMarker = BitmapDescriptorFactory.fromResource(R.drawable.icon_geo); // 自定义图标
// mCurrentMarker =null ; // 默认图标
mBaiduMap.setMyLocationConfigeration(new MyLocationConfiguration(mCurrentMode, true, mCurrentMarker));


定位模式:

private LocationMode mCurrentMode;


mCurrentMode = LocationMode.NORMAL; // 普通模式
// mCurrentMode = LocationMode.FOLLOWING; // 跟随模式
// mCurrentMode = LocationMode.COMPASS; // 罗盘模式
mBaiduMap.setMyLocationConfigeration(new MyLocationConfiguration(mCurrentMode, true, mCurrentMarker));


初始化:

// 地图初始化
		mMapView = (MapView) findViewById(R.id.bmapView);
		mBaiduMap = mMapView.getMap();
		// 开启定位图层
		mBaiduMap.setMyLocationEnabled(true);
		// 定位初始化
		mLocClient = new LocationClient(this);
		mLocClient.registerLocationListener(myListener);
		LocationClientOption option = new LocationClientOption();
		option.setOpenGps(true);// 打开gps
		option.setCoorType("bd09ll"); // 设置坐标类型
		option.setScanSpan(5000);
		mLocClient.setLocOption(option);
		mLocClient.start();


setScanSpan是定位时间间隔(ms),setCoorType坐标类型分为三种:

bd09ll
百度加密经纬度坐标

bd09
百度加密墨卡托坐标

gcj02
国测局加密经纬度坐标

定位SDK监听函数:

public class MyLocationListenner implements BDLocationListener {

		@Override
		public void onReceiveLocation(BDLocation location) {
			// map view 销毁后不在处理新接收的位置
			if (location == null || mMapView == null)
				return;
			MyLocationData locData = new MyLocationData.Builder()
					.accuracy(location.getRadius())
					// 此处设置开发者获取到的方向信息,顺时针0-360
					.direction(100).latitude(location.getLatitude())
					.longitude(location.getLongitude()).build();
			mBaiduMap.setMyLocationData(locData);
			if (isFirstLoc) {
				isFirstLoc = false;
				LatLng ll = new LatLng(location.getLatitude(),
						location.getLongitude());
				MapStatusUpdate u = MapStatusUpdateFactory.newLatLng(ll);
				mBaiduMap.animateMapStatus(u);
			}
		}

		public void onReceivePoi(BDLocation poiLocation) {
		}
	}


复写onPause,onResume,onDestory:

@Override
	protected void onPause() {
		mMapView.onPause();
		super.onPause();
	}

	@Override
	protected void onResume() {
		mMapView.onResume();
		super.onResume();
	}

	@Override
	protected void onDestroy() {
		// 退出时销毁定位
		mLocClient.stop();
		// 关闭定位图层
		mBaiduMap.setMyLocationEnabled(false);
		mMapView.onDestroy();
		mMapView = null;
		super.onDestroy();
	}


在AndroidManifest.xml中声明Service,这一步很关键,不写则无法定位:

<service
            android:name="com.baidu.location.f"
            android:enabled="true"
            android:process=":remote" >
        </service>


当然,Key也是不可或缺,而且必须正确的:

<meta-data
            android:name="com.baidu.lbsapi.API_KEY"
            android:value="************************" />


最后,在AndroidManifest.xml文件中要加入需要的权限:

<!-- For BaiduMap SDK START -->
    <permission android:name="android.permission.BAIDU_LOCATION_SERVICE" >
    </permission>

    <uses-permission android:name="android.permission.BAIDU_LOCATION_SERVICE" >
    </uses-permission>
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" >
    </uses-permission>
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" >
    </uses-permission>
    <uses-permission android:name="android.permission.INTERNET" >
    </uses-permission>
    <uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION" >
    </uses-permission>
    <!-- <uses-permission android:name="android.permission.WRITE_APN_SETTINGS"></uses-permission> -->
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" >
    </uses-permission>
    <uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" />
    <uses-permission android:name="android.permission.WAKE_LOCK" >
    </uses-permission>
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.ACCESS_GPS" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.READ_CONTACTS" />
    <uses-permission android:name="android.permission.CALL_PHONE" />
    <uses-permission android:name="android.permission.READ_SMS" />
    <uses-permission android:name="android.permission.SEND_SMS" />
    <!-- SDK1.5需要android.permission.GET_TASKS权限判断本程序是否为当前运行的应用? -->
    <uses-permission android:name="android.permission.GET_TASKS" />
    <uses-permission android:name="android.permission.CAMERA" >
    </uses-permission>
    <uses-permission android:name="android.permission.RECORD_AUDIO" >
    </uses-permission>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" >
    </uses-permission>
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
    <uses-permission android:name="android.permission.BROADCAST_STICKY" />
    <uses-permission android:name="android.permission.WRITE_SETTINGS" />
    <!-- 来电消音 -->
    <uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS" >
    </uses-permission>
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
    <!-- For BaiduMap SDK END -->


到此就大功告成了。


记录轨迹思路

用Service获取经纬度,onCreate中开始采集经纬度点,保存到ArrayList
每隔5秒取样一次,若经纬度未发生变化,丢弃该次取样
在onDestroy中,将ArrayList转成JSON格式,然后存储到SDCard中


显示轨迹思路

读取目录下所有轨迹文件,并生成ListView
在OnItemClick中将文件名称通过intent.putExtra传递给显示轨迹的Activity
根据文件名将对应的JSON内容转成ArrayList
然后将以上ArrayList的点集依次连线,并绘制到百度地图上
设置起始点Marker,Zoom级别,中心点为起始点
轨迹点小于2个无法绘制轨迹,给出提示

初步Demo效果图,获取的经纬度有偏移,明天看看哪里的问题:



先贴一个保存经纬度点的Service的核心代码:

public class RouteRecordService extends Service {
    private LocationClient mLocationClient;
    private final String ROUTE_PATH = "/sdcard/Route/";
    private String startTime = "";
    private String stopTime = "";

    private List<RoutePoint> list = new ArrayList<RoutePoint>();
    private RouteAdapter adapter = new RouteAdapter();

    private int startId = 1; // 轨迹点初始ID
    private int defaultDelay = 5000; // 轨迹点取样间隔时间:ms
    private final static double ERROR_CODE = 55.555;
    private double routeLng;
    private double routeLat;

    private boolean isEncrypt = false; // true:读取百度加密经纬度 false:读取设备提供经纬度
    private boolean isDebug = true;

    // 设备定位经纬度
    private enum DeviceLocType {
        LATITUDE, LONGITUDE
    }

    @Override
    public IBinder onBind(Intent intent) {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public void onCreate() {
        super.onCreate();
        InitLocation(LocationMode.Hight_Accuracy, "gcj02", 1000, false);
        // 初始化路径
        File filestoreMusic = new File(ROUTE_PATH);
        if (!filestoreMusic.exists()) {
            filestoreMusic.mkdir();
        }
        startTime = getTimeStr();
        if (isDebug) {
            Toast.makeText(getApplicationContext(), "Start Record Route",
                    Toast.LENGTH_SHORT).show();
        }

        // 开启轨迹记录线程
        new Thread(new RouteRecordThread()).start();
    }

    public class RouteRecordThread implements Runnable {

        @Override
        public void run() {
            while (true) {
                try {
                    Thread.sleep(defaultDelay);
                    Message message = new Message();
                    message.what = 1;
                    recordHandler.sendMessage(message);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
    }

    final Handler recordHandler = new Handler() {
        public void handleMessage(Message msg) {
            switch (msg.what) {
            case 1:
                startRecordRoute();
            }
            super.handleMessage(msg);
        }
    };

    private void startRecordRoute() {
        // 获取设备经纬度
        if (!isEncrypt) {
            routeLat = getDeviceLocation(DeviceLocType.LATITUDE);
            routeLng = getDeviceLocation(DeviceLocType.LONGITUDE);
            if (isDebug)
                Toast.makeText(getApplicationContext(),
                        "Device Loc:" + routeLat + "," + routeLng,
                        Toast.LENGTH_SHORT).show();
        }

        RoutePoint routePoint = new RoutePoint();
        if (routeLng != 5.55 && routeLat != 5.55) {
            if (list.size() > 0
                    && list.get(list.size() - 1).getLat() == routeLat
                    && (list.get(list.size() - 1).getLng() == routeLng)) {
                if (isDebug) {
                    // Toast.makeText(getApplicationContext(),
                    // "Route not change",
                    // Toast.LENGTH_SHORT).show();
                }
            } else {
                routePoint.setId(startId++);
                routePoint.setLng(routeLng);
                routePoint.setLat(routeLat);
                list.add(routePoint);
            }
        }
    }

    /**
     * 获取设备提供的经纬度,Network或GPS
     * 
     * @param type
     *            请求经度还是纬度
     * @return
     */
    private double getDeviceLocation(DeviceLocType type) {
        double deviceLat = ERROR_CODE;
        double deviceLng = ERROR_CODE;

        LocationManager locationManager = (LocationManager) getSystemService(getApplicationContext().LOCATION_SERVICE);
        if (locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
            Location location = locationManager
                    .getLastKnownLocation(LocationManager.GPS_PROVIDER);
            if (location != null) {
                deviceLat = location.getLatitude();
                deviceLng = location.getLongitude();
            } else {
                locationManager.requestLocationUpdates(
                        LocationManager.NETWORK_PROVIDER, 1000, 0,
                        new deviceLocationListener());
                Location location1 = locationManager
                        .getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
                if (location1 != null) {
                    deviceLat = location1.getLatitude(); // 经度
                    deviceLng = location1.getLongitude(); // 纬度
                }
            }
        } else {
            locationManager.requestLocationUpdates(
                    LocationManager.NETWORK_PROVIDER, 1000, 0,
                    new deviceLocationListener());
            Location location = locationManager
                    .getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
            if (location != null) {
                deviceLat = location.getLatitude(); // 经度
                deviceLng = location.getLongitude(); // 纬度
            }
        }
        if (type == DeviceLocType.LATITUDE)
            return deviceLat;
        else if (type == DeviceLocType.LONGITUDE)
            return deviceLng;
        else
            return ERROR_CODE;
    }

    /**
     * 设备位置监听器
     * 
     */
    class deviceLocationListener implements LocationListener {

        // Provider的状态在可用、暂时不可用和无服务三个状态直接切换时触发此函数
        public void onStatusChanged(String provider, int status, Bundle extras) {
        }

        // Provider被enable时触发此函数,比如GPS被打开
        @Override
        public void onProviderEnabled(String provider) {

        }

        // Provider被disable时触发此函数,比如GPS被关闭
        @Override
        public void onProviderDisabled(String provider) {
        }

        // 当坐标改变时触发此函数,如果Provider传进相同的坐标,它就不会被触发
        @Override
        public void onLocationChanged(Location location) {
            // routeLat = location.getLatitude(); // 经度
            // routeLng = location.getLongitude(); // 纬度
        }
    };

    private String getTimeStr() {
        long nowTime = System.currentTimeMillis();
        Date date = new Date(nowTime);
        String strs = "" + ERROR_CODE;
        try {
            SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd_HHmmss");
            strs = sdf.format(date);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return strs;
    }

    /**
     * 初始化轨迹文件路径和名称
     * 
     * @return String
     */
    private String getFilePath() {
        stopTime = getTimeStr();
        String format = ".json";
        if (isDebug)
            format = ".txt";
        return ROUTE_PATH + startTime + "-" + stopTime + format;
    }

    class MyLocationListener implements BDLocationListener {

        @Override
        public void onReceiveLocation(BDLocation location) {
            // 读取百度加密经纬度
            if (isEncrypt) {
                routeLng = location.getLongitude();
                routeLat = location.getLatitude();
            }
        }
    }

}



优化轨迹平滑度:

同一数据,优化前后效果对比:



优化算法:

public List<RoutePoint> optimizePoints(List<RoutePoint> inPoint) {
        int size = inPoint.size();
        List<RoutePoint> outPoint;

        int i;
        if (size < 5) {
            return inPoint;
        } else {
            // Latitude
            inPoint.get(0)
                    .setLat((3.0 * inPoint.get(0).getLat() + 2.0
                            * inPoint.get(1).getLat() + inPoint.get(2).getLat() - inPoint
                            .get(4).getLat()) / 5.0);
            inPoint.get(1)
                    .setLat((4.0 * inPoint.get(0).getLat() + 3.0
                            * inPoint.get(1).getLat() + 2
                            * inPoint.get(2).getLat() + inPoint.get(3).getLat()) / 10.0);

            inPoint.get(size - 2).setLat(
                    (4.0 * inPoint.get(size - 1).getLat() + 3.0
                            * inPoint.get(size - 2).getLat() + 2
                            * inPoint.get(size - 3).getLat() + inPoint.get(
                            size - 4).getLat()) / 10.0);
            inPoint.get(size - 1).setLat(
                    (3.0 * inPoint.get(size - 1).getLat() + 2.0
                            * inPoint.get(size - 2).getLat()
                            + inPoint.get(size - 3).getLat() - inPoint.get(
                            size - 5).getLat()) / 5.0);

            // Longitude
            inPoint.get(0)
                    .setLng((3.0 * inPoint.get(0).getLng() + 2.0
                            * inPoint.get(1).getLng() + inPoint.get(2).getLng() - inPoint
                            .get(4).getLng()) / 5.0);
            inPoint.get(1)
                    .setLng((4.0 * inPoint.get(0).getLng() + 3.0
                            * inPoint.get(1).getLng() + 2
                            * inPoint.get(2).getLng() + inPoint.get(3).getLng()) / 10.0);

            inPoint.get(size - 2).setLng(
                    (4.0 * inPoint.get(size - 1).getLng() + 3.0
                            * inPoint.get(size - 2).getLng() + 2
                            * inPoint.get(size - 3).getLng() + inPoint.get(
                            size - 4).getLng()) / 10.0);
            inPoint.get(size - 1).setLng(
                    (3.0 * inPoint.get(size - 1).getLng() + 2.0
                            * inPoint.get(size - 2).getLng()
                            + inPoint.get(size - 3).getLng() - inPoint.get(
                            size - 5).getLng()) / 5.0);
        }
        return inPoint;
    }



截取轨迹图片并分享





@@ -1,14 +1,24 @@
package com.zms.baidulbs;
+import java.io.File;
import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import org.apache.http.util.EncodingUtils;
import android.app.Activity;
+import android.content.Intent;
import android.content.SharedPreferences;
+import android.graphics.Bitmap;
+import android.graphics.Color;
+import android.net.Uri;
import android.os.Bundle;
+import android.view.View;
+import android.view.Window;
import android.widget.Button;
import android.widget.Toast;
@@ -24,6 +34,7 @@
import com.baidu.mapapi.map.OverlayOptions;
import com.baidu.mapapi.map.PolylineOptions;
import com.baidu.mapapi.map.BaiduMap.OnMarkerClickListener;
+import com.baidu.mapapi.map.BaiduMap.SnapshotReadyCallback;
import com.baidu.mapapi.map.InfoWindow.OnInfoWindowClickListener;
import com.baidu.mapapi.model.LatLng;
import com.zms.baidulbs.R;
@@ -34,11 +45,13 @@
private InfoWindow mInfoWindow;
private Marker mMarkerStart;
private Marker mMarkerEnd;
+   private Button btnShare, btnBack;
public double mRouteLatitude = 0.0;
public double mRouteLongitude = 0.0;
private final String ROUTE_PATH = "/sdcard/Route/";
+   private String filePath = "";
private RouteAdapter routeAdapter = new RouteAdapter();
// 初始化全局 bitmap 信息,不用时及时 recycle
@@ -51,13 +64,22 @@
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
+   requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.route_show);
-   String filePath = "";
+   // Hide Status Bar
+   View decorView = getWindow().getDecorView();
+   decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_FULLSCREEN);
+
+   btnShare = (Button) findViewById(R.id.btnShare);
+   btnBack = (Button) findViewById(R.id.btnBack);
+   btnShare.setOnClickListener(new MyOnClickListener());
+   btnBack.setOnClickListener(new MyOnClickListener());
+
Bundle extras = getIntent().getExtras();
if (extras != null) {
filePath = extras.getString("filePath");
-   setTitle(filePath.substring(0, filePath.length() - 4));
+   // setTitle(filePath.substring(0, filePath.length() - 4));
} else {
Toast.makeText(getApplicationContext(), "轨迹文件不存在",
Toast.LENGTH_SHORT).show();
@@ -71,6 +93,51 @@ protected void onCreate(Bundle savedInstanceState) {
}
+   class MyOnClickListener implements View.OnClickListener {
+   @Override
+   public void onClick(View v) {
+   switch (v.getId()) {
+   case R.id.btnShare:
+   mBaiduMap.snapshot(new SnapshotReadyCallback() {
+   public void onSnapshotReady(Bitmap snapshot) {
+   File file = new File(ROUTE_PATH + filePath + ".png");
+   FileOutputStream out;
+   try {
+   out = new FileOutputStream(file);
+   if (snapshot.compress(Bitmap.CompressFormat.PNG,
+   100, out)) {
+   out.flush();
+   out.close();
+   }
+   Intent intent = new Intent(Intent.ACTION_SEND);
+   Uri uri = Uri.fromFile(file);
+   intent.setType("image/png");
+   intent.putExtra(Intent.EXTRA_STREAM, uri);
+   intent.putExtra(Intent.EXTRA_TITLE, "分享轨迹图到");
+   Intent chooserIntent = Intent.createChooser(intent,
+   "分享轨迹");
+   if (chooserIntent == null) {
+   return;
+   }
+   try {
+   startActivity(chooserIntent);
+   } catch (android.content.ActivityNotFoundException ex) {
+   }
+   } catch (FileNotFoundException e) {
+   e.printStackTrace();
+   } catch (IOException e) {
+   e.printStackTrace();
+   }
+   }
+   });
+   break;
+   case R.id.btnBack:
+   finish();
+   break;
+   }
+   }
+   }
+


转载请注明出处:周木水的CSDN博客 http://blog.csdn.net/zhoumushui
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: