考试
来源:互联网 发布:中美 知乎 编辑:程序博客网 时间: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 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 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;
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);
}
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();
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以后图面上不再有定位蓝点的概念,但是会持续回调位置信息
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 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);
}
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);
}
}
ToastUtil.show(Main2Activity.this, R.string.no_result);
}
} else {
ToastUtil.showerror(Main2Activity.this.getApplicationContext(), errorCode);
}
}
@Override
public void onWalkRouteSearched(WalkRouteResult walkRouteResult, int i) {
public void onWalkRouteSearched(WalkRouteResult walkRouteResult, int i) {
}
@Override
public void onRideRouteSearched(RideRouteResult rideRouteResult, int i) {
public void onRideRouteSearched(RideRouteResult rideRouteResult, int i) {
}
});
Location myLocation = amap.getMyLocation();
double latitude = myLocation.getLatitude();
double longitude = myLocation.getLongitude();
});
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;
}
});
}
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();
}
protected void onDestroy() {
super.onDestroy();
map.onDestroy();
}
@Override
protected void onResume() {
super.onResume();
map.onResume();
}
protected void onResume() {
super.onResume();
map.onResume();
}
@Override
protected void onPause() {
super.onPause();
map.onPause();
}
protected void onPause() {
super.onPause();
map.onPause();
}
@Override
public void onSaveInstanceState(Bundle outState, PersistableBundle outPersistentState) {
super.onSaveInstanceState(outState, outPersistentState);
map.onSaveInstanceState(outState);
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;
}
}
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;
}
// 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;
}
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()));
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) {
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);
}
});
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、音乐
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 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;
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);
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;
}
}
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");
}
public void onStart(SHARE_MEDIA share_media) {
//启动分享
Log.e("TAG","onStart");
}
@Override
public void onResult(SHARE_MEDIA share_media) {
//分享完成后回调
Log.e("TAG","onResult");
}
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");
}
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");
}
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();
}
}
}
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
阅读全文
0 0
- 考试
- 考试!
- 考试
- 考试
- 考试
- 考试
- 考试
- 考试
- 考试
- 考试
- 考试
- 考试
- 考试!
- 考试
- 考试
- 考试
- 考试
- 考试
- 登录失效后ajax访问后台问题解决
- 初中级java开发工程师面试总结
- 笨方法学python习题13、14
- select2插件下拉选英文无法匹配XXX%,只能匹配%XXX%问题
- java中的基本数据类型存储的范围原理解释总结
- 考试
- 《剑指offer》刷题笔记(面试思路):二叉树的镜像
- 比特币矿场“矿世云算”获得极豆资本数千万元战略投资
- CentOS中添加Swap
- spingmvc --jackson
- [Spring] Spring AOP编程理解
- Linux下Mysql中文乱码解决方案(纯记录 怕忘)
- Python 字典(Dictionary) get()方法
- Android在线游戏联机平台开源