考试

来源:互联网 发布:中美 知乎 编辑:程序博客网 时间:2024/04/27 23:57
package com.example.dell.day_gaodedemo;

import android.location.Location;
import android.os.Bundle;
import android.os.PersistableBundle;
import android.support.v7.app.AppCompatActivity;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

import com.amap.api.maps.AMap;
import com.amap.api.maps.MapView;
import com.amap.api.maps.model.LatLng;
import com.amap.api.maps.model.Marker;
import com.amap.api.maps.model.MarkerOptions;
import com.amap.api.maps.model.MyLocationStyle;
import com.amap.api.services.core.AMapException;
import com.amap.api.services.core.LatLonPoint;
import com.amap.api.services.core.PoiItem;
import com.amap.api.services.poisearch.PoiResult;
import com.amap.api.services.poisearch.PoiSearch;
import com.amap.api.services.route.BusRouteResult;
import com.amap.api.services.route.DrivePath;
import com.amap.api.services.route.DriveRouteResult;
import com.amap.api.services.route.RideRouteResult;
import com.amap.api.services.route.RouteSearch;
import com.amap.api.services.route.WalkRouteResult;

import overlay.DrivingRouteOverlay;


public class Main2Activity extends AppCompatActivity implements View.OnClickListener {

    private MapView map;
    private AMap amap;
    private MyLocationStyle myLocationStyle;
    private EditText text1;
    private EditText text2;
    private Button but;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);
        initView();
        map.onCreate(savedInstanceState);
    }

    private void initView() {
        map = (MapView) findViewById(R.id.map);
        text1 = (EditText) findViewById(R.id.text1);
        text1.setOnClickListener(this);
        text2 = (EditText) findViewById(R.id.text2);
        text2.setOnClickListener(this);
        but = (Button) findViewById(R.id.but);
        but.setOnClickListener(this);
        amap = this.map.getMap();


        myLocationStyle = new MyLocationStyle();//初始化定位蓝点样式类myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_LOCATION_ROTATE);//连续定位、且将视角移动到地图中心点,定位点依照设备方向旋转,并且会跟随设备移动。(1秒1次定位)如果不设置myLocationType,默认也会执行此种模式。
        myLocationStyle.interval(2000000); //设置连续定位模式下的定位间隔,只在连续定位模式下生效,单次定位模式下不会生效。单位为毫秒。
        amap.setMyLocationStyle(myLocationStyle);//设置定位蓝点的Style
//aMap.getUiSettings().setMyLocationButtonEnabled(true);设置默认定位按钮是否显示,非必需设置。
        amap.setMyLocationEnabled(true);// 设置为true表示启动显示定位蓝点,false表示隐藏定位蓝点并不进行定位,默认是false。

        myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_LOCATION_ROTATE);//连续定位、且将视角移动到地图中心点,定位点依照设备方向旋转,并且会跟随设备移动。(1秒1次定位)默认执行此种模式
        myLocationStyle.showMyLocation(true);//设置是否显示定位小蓝点,用于满足只想使用定位,不想使用定位小蓝点的场景,设置false以后图面上不再有定位蓝点的概念,但是会持续回调位置信息

        amap.setOnMarkerClickListener(new AMap.OnMarkerClickListener() {
            @Override
            public boolean onMarkerClick(Marker marker) {
                RouteSearch routeSearch = new RouteSearch(Main2Activity.this);
                routeSearch.setRouteSearchListener(new RouteSearch.OnRouteSearchListener() {
                    @Override
                    public void onBusRouteSearched(BusRouteResult busRouteResult, int i) {

                    }

                    @Override
                    public void onDriveRouteSearched(DriveRouteResult result, int errorCode) {
                        amap.clear();// 清理地图上的所有覆盖物
                        if (errorCode == AMapException.CODE_AMAP_SUCCESS) {
                            if (result != null && result.getPaths() != null) {
                                if (result.getPaths().size() > 0) {
                                    final DrivePath drivePath = result.getPaths()
                                            .get(0);
                                    DrivingRouteOverlay drivingRouteOverlay = new DrivingRouteOverlay(
                                            Main2Activity.this, amap, drivePath,
                                            result.getStartPos(),
                                            result.getTargetPos(), null);
                                    drivingRouteOverlay.setNodeIconVisibility(false);//设置节点marker是否显示
                                    drivingRouteOverlay.setIsColorfulline(true);//是否用颜色展示交通拥堵情况,默认true
                                    drivingRouteOverlay.removeFromMap();
                                    drivingRouteOverlay.addToMap();
                                    drivingRouteOverlay.zoomToSpan();
                                } else if (result != null && result.getPaths() == null) {
                                    ToastUtil.show(Main2Activity.this, R.string.no_result);
                                }

                            } else {
                                ToastUtil.show(Main2Activity.this, R.string.no_result);
                            }
                        } else {
                            ToastUtil.showerror(Main2Activity.this.getApplicationContext(), errorCode);
                        }
                    }

                    @Override
                    public void onWalkRouteSearched(WalkRouteResult walkRouteResult, int i) {

                    }

                    @Override
                    public void onRideRouteSearched(RideRouteResult rideRouteResult, int i) {

                    }
                });
                Location myLocation = amap.getMyLocation();
                double latitude = myLocation.getLatitude();
                double longitude = myLocation.getLongitude();

                LatLonPoint latLonPoint = new LatLonPoint(latitude, longitude);

                LatLng position = marker.getPosition();
                double latitude1 = position.latitude;
                double longitude1 = position.longitude;
                LatLonPoint latLonPoint1 = new LatLonPoint(latitude1, longitude1);
                RouteSearch.FromAndTo fromAndTo = new RouteSearch.FromAndTo(latLonPoint, latLonPoint1);
                RouteSearch.DriveRouteQuery driveRouteQuery = new RouteSearch.DriveRouteQuery(fromAndTo, RouteSearch.DRIVING_MULTI_CHOICE_HIGHWAY_AVOID_CONGESTION, null, null, "");
                routeSearch.calculateDriveRouteAsyn(driveRouteQuery);
                return true;
            }
        });
    }

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

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

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

    @Override
    public void onSaveInstanceState(Bundle outState, PersistableBundle outPersistentState) {
        super.onSaveInstanceState(outState, outPersistentState);
        map.onSaveInstanceState(outState);

    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.but:
                submit();
                break;
        }
    }

    private void submit() {
        // validate
        String city = text1.getText().toString().trim();
        if (TextUtils.isEmpty(city)) {
            Toast.makeText(this, "所在地", Toast.LENGTH_SHORT).show();
            return;
        }

        String text = text2.getText().toString().trim();
        if (TextUtils.isEmpty(text)) {
            Toast.makeText(this, "要去", Toast.LENGTH_SHORT).show();
            return;
        }

        // TODO validate success, do something
        PoiSearch.Query query = new PoiSearch.Query(text, "", city);
        query.setPageNum(1);
        query.setPageSize(10);
        PoiSearch s = new PoiSearch(this, query);
        s.setOnPoiSearchListener(new PoiSearch.OnPoiSearchListener() {
            @Override
            public void onPoiSearched(PoiResult poiResult, int i) {
                amap.clear();
                for (PoiItem item : poiResult.getPois()) {
                    Log.d("TAG", "" + item.getTitle() + "\n" + item.getAdName() + "\n" + item.getCityName() + "\n" + item.getLatLonPoint().toString());
                    LatLng latLng = new LatLng(item.getLatLonPoint().getLatitude(), item.getLatLonPoint().getLongitude());
                    final Marker marker = amap.addMarker(new MarkerOptions().position(latLng).title(item.getTitle()).snippet(item.getSnippet()));

                }
            }

            @Override
            public void onPoiItemSearched(PoiItem poiItem, int i) {

            }
        });
        s.searchPOIAsyn();
    }
}
-------------------------------------------------------------------------------------------------------------------------------
1、打开高德开放平台
2、创建应用
3、添加新key:dd9dde5da25a5811031cb1beb5acb7a5
 sha1值获取:找到系统默认的debug.keystore(C:\Users\Administrator\.android\debug.keystore)
    在cmd窗口或android studio 中的Terminal中执行命令:keytool -v -list -keystore keystore地址
4、添加jar和so库(不要添加v4包)
 so库添加方式:
  第一种:使用默认配置,不需要修改build.gradle。在 main 目录下创建文件夹 jniLibs (如果有就不需要创建了),将下载文件的 armeabi 文件夹复制到这个目录下,如果已经有这个目录,将下载的 so 库复制到这个目录即可。
  第二种:使用自定义配置,将下载文件的 armeabi 文件夹复制到 libs 目录,如果有这个目录,请将下载的 so 库复制到这个目录,然后打开build.gradle,找到 sourceSets 标签:
  sourceSets{
   main{
    jniLibs.srcDirs = ['libs']
   }
  }
5、配置
 1、配置AndroidManifest.xml
  1、声明Service组件
   <service android:name="com.amap.api.location.APSService"></service>
  2、声明权限
   <!--用于进行网络定位-->
   <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"></uses-permission>
   <!--用于访问GPS定位-->
   <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>
   <!--用于获取运营商信息,用于支持提供运营商信息相关的接口-->
   <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
   <!--用于访问wifi网络信息,wifi信息会用于进行网络定位-->
   <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>
   <!--用于获取wifi的获取权限,wifi信息会用来进行网络定位-->
   <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission>
   <!--用于访问网络,网络定位需要上网-->
   <uses-permission android:name="android.permission.INTERNET"></uses-permission>
   <!--用于读取手机当前的状态-->
   <uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission>
   <!--用于写入缓存数据到扩展存储卡-->
   <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
   <!--用于申请调用A-GPS模块-->
   <uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS"></uses-permission>
   <!--用于申请获取蓝牙信息进行室内定位-->
   <uses-permission android:name="android.permission.BLUETOOTH"></uses-permission>
   <uses-permission android:name="android.permission.BLUETOOTH_ADMIN"></uses-permission>
  3、设置高德Key
   <meta-data android:name="com.amap.api.v2.apikey" android:value="key">//开发者申请的key      
           
   </meta-data>
6、定位
 1、声明成员变量
  //声明AMapLocationClient类对象
  public AMapLocationClient mLocationClient = null;
 2、初始化定位
  //初始化定位
  mLocationClient = new AMapLocationClient(getApplicationContext());
 3、设置定位回调监听
  mLocationClient.setLocationListener(new AMapLocationListener(){
    @Override
            public void onLocationChanged(AMapLocation aMapLocation) {
    //获取定位结果
   }
  });
 4、定位结果处理
  if (aMapLocation != null) {
            if (aMapLocation.getErrorCode() == 0) {
                //可在其中解析amapLocation获取相应内容。
                int locationType = aMapLocation.getLocationType();//获取当前定位结果来源,如网络定位结果,详见定位类型表
                double latitude = aMapLocation.getLatitude();//获取纬度
                double longitude = aMapLocation.getLongitude();//获取经度
                float accuracy = aMapLocation.getAccuracy();//获取精度信息
                String address = aMapLocation.getAddress();//地址,如果option中设置isNeedAddress为false,则没有此结果,网络定位结果中会有地址信息,GPS定位不返回地址。
                aMapLocation.getCountry();//国家信息
                aMapLocation.getProvince();//省信息
                aMapLocation.getCity();//城市信息
                aMapLocation.getDistrict();//城区信息
                aMapLocation.getStreet();//街道信息
                aMapLocation.getStreetNum();//街道门牌号信息
                aMapLocation.getCityCode();//城市编码
                aMapLocation.getAdCode();//地区编码
                aMapLocation.getAoiName();//获取当前定位点的AOI信息
                aMapLocation.getBuildingId();//获取当前室内定位的建筑物Id
                aMapLocation.getFloor();//获取当前室内定位的楼层
                //获取定位时间
                SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                Date date = new Date(aMapLocation.getTime());
                df.format(date);
                Log.e("TAG", "纬度:" + latitude + "   经度:" + longitude + "  地址:" + address);
            } else {
                //定位失败时,可通过ErrCode(错误码)信息来确定失败的原因,errInfo是错误信息,详见错误码表。
                Log.e("AmapError", "location Error, ErrCode:"
                    + aMapLocation.getErrorCode() + ", errInfo:"
                    + aMapLocation.getErrorInfo());
            }
  }
  
7、地图
 1、在xml中声明MapView控件
 2、在activity中初始化MapView
 3、在声明周期中调用MapView的声明周期:onCreate\onResume\onPause\onDestroy\onSaveInstanceState
 
8、蓝点
 1、创建MyLocationStyle对象: style = new MyLocationStyle();
 2、设置定位间隔时间:style.interval(2000);
 3、设置圆形区域:
  1、圆形区域填充色:style.radiusFillColor(Color.rgb(0, 255, 255));
  2、圆形区域(以定位位置为圆心,定位半径的圆形区域)的边框颜色:style.strokeColor(Color.rgb(0, 100, 255));
  3、圆形区域(以定位位置为圆心,定位半径的圆形区域)的边框宽度:style.strokeWidth(2F);
 4、设置定位模式和蓝点模式:(选择其一)
  myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_SHOW);//只定位一次。
  myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_LOCATE) ;//定位一次,且将视角移动到地图中心点。
  myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_FOLLOW) ;//连续定位、且将视角移动到地图中心点,定位蓝点跟随设备移动。(1秒1次定位)
  myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_MAP_ROTATE);//连续定位、且将视角移动到地图中心点,地图依照设备方向旋转,定位点会跟随设备移动。(1秒1次定位)
  myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_LOCATION_ROTATE);//连续定位、且将视角移动到地图中心点,定位点依照设备方向旋转,并且会跟随设备移动。(1秒1次定位)默认执行此种模式。
  //以下四种模式从5.1.0版本开始提供
  myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_LOCATION_ROTATE_NO_CENTER);//连续定位、且将视角移动到地图中心点,定位点依照设备方向旋转,并且会跟随设备移动。(1秒1次定位)默认执行此种模式。
  myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_LOCATION_ROTATE_NO_CENTER);//连续定位、蓝点不会移动到地图中心点,定位点依照设备方向旋转,并且蓝点会跟随设备移动。
  myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_FOLLOW_NO_CENTER);//连续定位、蓝点不会移动到地图中心点,并且蓝点会跟随设备移动。
  myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_MAP_ROTATE_NO_CENTER);//连续定位、蓝点不会移动到地图中心点,地图依照设备方向旋转,并且蓝点会跟随设备移动。
9、POI
 1、创建PoiSearch.Query对象
  query = new PoiSearch.Query(keyWord, "", cityCode);
  //keyWord表示搜索字符串,
  //第二个参数表示POI搜索类型,二者选填其一,选用POI搜索类型时建议填写类型代码,码表可以参考下方(而非文字)
  //cityCode表示POI搜索区域,可以是城市编码也可以是城市名称,也可以传空字符串,空字符串代表全国在全国范围内进行搜索
  query.setPageSize(10);// 设置每页最多返回多少条poiitem
  query.setPageNum(currentPage);//设置查询页码
 2、构造 PoiSearch 对象,并设置监听。
  poiSearch = new PoiSearch(this, query);
  poiSearch.setOnPoiSearchListener(this);
 3、调用 PoiSearch 的 searchPOIAsyn() 方法发送请求。
  poiSearch.searchPOIAsyn();
 4、通过回调接口 onPoiSearched 解析返回的结果,将查询到的 POI 以绘制点的方式显示在地图上。
10、覆盖物(绘制点)
 1、创建绘制点:
  LatLng latLng = new LatLng(39.906901,116.397972);
  final Marker marker = aMap.addMarker(new MarkerOptions().position(latLng).title("北京").snippet("DefaultMarker"));
 2、设置Marker点击事件
  // 定义 Marker 点击事件监听
  AMap.OnMarkerClickListener markerClickListener = new AMap.OnMarkerClickListener() {
   // marker 对象被点击时回调的接口
   // 返回 true 则表示接口已响应事件,否则返回false
   @Override
   public boolean onMarkerClick(Marker marker) {
    return false;
   }
  };
  // 绑定 Marker 被点击事件
  mAMap.setOnMarkerClickListener(markerClickListener);
11、路径规划
 1、路径规划实现
  1、公共交通
   aMap.clear();// 清理地图上的所有覆盖物
   if (errorCode == AMapException.CODE_AMAP_SUCCESS) {
    if (result != null && result.getPaths() != null) {
     if (result.getPaths().size() > 0) {
      BusResultListAdapter mBusResultListAdapter = new BusResultListAdapter(mContext, result);
      mBusResultList.setAdapter(mBusResultListAdapter);  
     } else if (result != null && result.getPaths() == null) {
      ToastUtil.show(mContext, R.string.no_result);
     }
    } else {
     ToastUtil.show(mContext, R.string.no_result);
    }
   } else {
    ToastUtil.showerror(this.getApplicationContext(), errorCode);
   }
  2、自驾
   aMap.clear();// 清理地图上的所有覆盖物
   if (errorCode == AMapException.CODE_AMAP_SUCCESS) {
    if (result != null && result.getPaths() != null) {
     if (result.getPaths().size() > 0) {
      mDriveRouteResult = result;
      final DrivePath drivePath = mDriveRouteResult.getPaths()
        .get(0);
      DrivingRouteOverlay drivingRouteOverlay = new DrivingRouteOverlay(
        mContext, aMap, drivePath,
        mDriveRouteResult.getStartPos(),
        mDriveRouteResult.getTargetPos(), null);
      drivingRouteOverlay.setNodeIconVisibility(false);//设置节点marker是否显示
      drivingRouteOverlay.setIsColorfulline(true);//是否用颜色展示交通拥堵情况,默认true
      drivingRouteOverlay.removeFromMap();
      drivingRouteOverlay.addToMap();
      drivingRouteOverlay.zoomToSpan();            
     } else if (result != null && result.getPaths() == null) {
      ToastUtil.show(mContext, R.string.no_result);
     }

    } else {
     ToastUtil.show(mContext, R.string.no_result);
    }
   } else {
    ToastUtil.showerror(this.getApplicationContext(), errorCode);
   }
  3、走路
   aMap.clear();// 清理地图上的所有覆盖物
   if (errorCode == AMapException.CODE_AMAP_SUCCESS) {
    if (result != null && result.getPaths() != null) {
     if (result.getPaths().size() > 0) {
      mWalkRouteResult = result;
      final WalkPath walkPath = mWalkRouteResult.getPaths()
        .get(0);
      WalkRouteOverlay walkRouteOverlay = new WalkRouteOverlay(
        this, aMap, walkPath,
        mWalkRouteResult.getStartPos(),
        mWalkRouteResult.getTargetPos());
      walkRouteOverlay.removeFromMap();
      walkRouteOverlay.addToMap();
      walkRouteOverlay.zoomToSpan();
     } else if (result != null && result.getPaths() == null) {
      ToastUtil.show(mContext, R.string.no_result);
     }
    } else {
     ToastUtil.show(mContext, R.string.no_result);
    }
   } else {
    ToastUtil.showerror(this.getApplicationContext(), errorCode);
   }
  4、骑车
   aMap.clear();// 清理地图上的所有覆盖物
   if (errorCode == AMapException.CODE_AMAP_SUCCESS) {
    if (result != null && result.getPaths() != null) {
     if (result.getPaths().size() > 0) {
      mRideRouteResult = result;
      final RidePath ridePath = mRideRouteResult.getPaths()
        .get(0);
      RideRouteOverlay rideRouteOverlay = new RideRouteOverlay(
        this, aMap, ridePath,
        mRideRouteResult.getStartPos(),
        mRideRouteResult.getTargetPos());
      rideRouteOverlay.removeFromMap();
      rideRouteOverlay.addToMap();
      rideRouteOverlay.zoomToSpan();
     } else if (result != null && result.getPaths() == null) {
      ToastUtil.show(mContext, R.string.no_result);
     }
    } else {
     ToastUtil.show(mContext, R.string.no_result);
    }
   } else {
    ToastUtil.showerror(this.getApplicationContext(), errorCode);
   }
 2、路径规划之监听中接受数据
  需要复制的文件:(需修改包引用)
   1、overlay包下所有类
   2、com\amap\map3d\demo\util包下:
    AMapUtil.java
    ChString.java
    ToastUtil.java
   3、res\drawable-hdpi下:
    amap_bus.png
    amap_car.png
    amap_end.png
    amap_man.png
    amap_ride.png
    amap_start.png
    amap_through.png
    
    dir1.png-dir16.png
   4、res\values下strings.xml中:<string name="no_result">对不起,没有搜索到相关数据!</string>
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
classpath 'org.greenrobot:greendao-gradle-plugin:3.2.0'
------------------------------------------------------------
compile 'org.greenrobot:greendao:3.2.0'
------------------------------------
apply plugin: 'org.greenrobot.greendao'
-------------------------------------------------
  greendao {
        schemaVersion 1
        daoPackage 'com.example.demo'
        targetGenDir 'src/main/java'
    }
-----------------------------
45:90:03:A3:78:75:B0:B7:29:72:A1:21:4D:E0:7D:BB:67:5E:50:52
=======================================================================
链接:http://dev.umeng.com/social/android/quick-integration#1
0、创建友盟APPKEY
1、下载SDK
2、生成资源和jar包:点击友盟集成工具.jar
  双击jar如打不开时:请使用黑窗口 java -jar jar包路径
3、复制jar包和资源到项目中
  jar包需要复制到libs中,并且添加依赖
4、在Manifest中添加权限
 <uses-permission android:name="android.permission.ACCESS_NETWORK_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.READ_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" />
5、进行activity标签配置
6、配置友盟appkey
7、创建App类,继承Application
  1、平台appkey配置
  2、对sdk进行初始化
8、签名配置
  1、复制debug.keystore到model下
  2、在build.grandle中添加:
   signingConfigs {
    debug {
     storeFile file('debug.keystore')
     storePassword "android"
     keyAlias "androiddebugkey"
     keyPassword "android"
    }
   }
   buildTypes {
    release {
     minifyEnabled false
     signingConfig signingConfigs.debug
     proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
    debug {
     minifyEnabled false
     signingConfig signingConfigs.debug
     proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
   }
9、代码混淆  
10、分享
 带面板分享:
  new ShareAction(MainActivity.this)
   .withText("hello")                   
   .setDisplayList(SHARE_MEDIA.SINA,SHARE_MEDIA.QQ,SHARE_MEDIA.WEIXIN)//TODO 设置分享面板上的平台
   .setCallback(umShareListener)
   .open();
 不带面板分享:
  new ShareAction(MainActivity.this).withText("hello")
  .setPlatform(SHARE_MEDIA.QQ)//设置分享到的平台
  .setCallback(umShareListener)
  .share();
11、分享不同的内容
   1、文本
   2、图片
   3、链接
   4、视频
   5、GIF
   6、音乐









  6.0权限



package com.silent.umengsharedemo;

import android.Manifest;
import android.content.pm.PackageManager;
import android.os.Build;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.Button;

import com.umeng.socialize.ShareAction;
import com.umeng.socialize.UMShareListener;
import com.umeng.socialize.bean.SHARE_MEDIA;
import com.umeng.socialize.media.UMImage;

public class MainActivity extends AppCompatActivity implements View.OnClickListener,UMShareListener {

    private Button mShare;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initView();
        if(Build.VERSION.SDK_INT>=23){
            String[] mPermissionList = new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE,
                    Manifest.permission.ACCESS_FINE_LOCATION,Manifest.permission.CALL_PHONE,
                    Manifest.permission.READ_LOGS,Manifest.permission.READ_PHONE_STATE,
                    Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.SET_DEBUG_APP,
                    Manifest.permission.SYSTEM_ALERT_WINDOW,Manifest.permission.GET_ACCOUNTS,
                    Manifest.permission.WRITE_APN_SETTINGS};
            boolean b = checkPermission(mPermissionList);
            if(b){
                //执行业务代码
            }else{
                ActivityCompat.requestPermissions(this,mPermissionList,123);
            }
        }
    }
    public boolean checkPermission(String[] permission){
        for(String p:permission){
            if(ContextCompat.checkSelfPermission(this,p)== PackageManager.PERMISSION_GRANTED){
                return true;
            }
        }
        return false;
    }
    private void initView() {
        mShare = (Button) findViewById(R.id.mShare);

        mShare.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.mShare:
//                new ShareAction(MainActivity.this)
//                        .withText("hello")
//                        .setDisplayList(SHARE_MEDIA.SINA,SHARE_MEDIA.QQ,SHARE_MEDIA.WEIXIN)
//                        .setCallback(MainActivity.this)
//                        .open();
                UMImage image = new UMImage(MainActivity.this, R.mipmap.ic_launcher);//网络图片
                UMImage thumb =  new UMImage(this, R.mipmap.ic_launcher);
                image.setThumb(thumb);
                new ShareAction(MainActivity.this).setPlatform(SHARE_MEDIA.QQ).withMedia(image).setCallback(MainActivity.this).share();
                break;
        }
    }

    @Override
    public void onStart(SHARE_MEDIA share_media) {
        //启动分享
        Log.e("TAG","onStart");
    }

    @Override
    public void onResult(SHARE_MEDIA share_media) {
        //分享完成后回调
        Log.e("TAG","onResult");
    }

    @Override
    public void onError(SHARE_MEDIA share_media, Throwable throwable) {
        //分享错误
        Log.e("TAG","onError");
    }

    @Override
    public void onCancel(SHARE_MEDIA share_media) {
        //分享取消
        Log.e("TAG","onCancel");
    }

    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        Log.e("TAG",grantResults.toString());
        boolean b = checkPermission(permissions);
        if(true){
            //业务代码
        }else{
            finish();
        }
    }
}


































http://www.cnblogs.com/Coderwei2016/p/6155498.html //统计网址教程

http://dev.umeng.com/social/android/quick-integration#1_3   分享网址教程

http://dev.umeng.com/social/android/login-page//第三方登陆

59786089c62dca1fea001479

http://blog.csdn.net/liuyangqiao/article/details/51583789// TooBar


原创粉丝点击