文档章节

百度地图定位

huiyun-yoyo
 huiyun-yoyo
发布于 2016/11/15 17:40
字数 448
阅读 62
收藏 0

行业解决方案、产品招募中!想赚钱就来传!>>>

//Observable 被观察者。
public class LocationObservable {

    private static LocationService locationService;
    private static String result;

    public static void getLocation(final RxAppCompatActivity context, final MyApplication application, Subscriber subscriber) {
        Observable.create(new Observable.OnSubscribe<String>() {
            @Override
            public void call(final Subscriber<? super String> subscriber) {
                locationService = application.locationService;
                locationService.registerListener(new BDLocationListener() {
                    @Override
                    public void onReceiveLocation(BDLocation location) {
                        if (null != location && location.getLocType() != BDLocation.TypeServerError) {
                            result = location.getCity();
                            if (location.getLocType() == BDLocation.TypeServerError) {
                                result = "服务端网络定位失败,可以反馈IMEI号和大体定位时间到loc-bugs@baidu.com,会有人追查原因";
                            } else if (location.getLocType() == BDLocation.TypeNetWorkException) {
                                result = "网络不同导致定位失败,请检查网络是否通畅";
                            } else if (location.getLocType() == BDLocation.TypeCriteriaException) {
                                result = "无法获取有效定位依据导致定位失败,一般是由于手机的原因,处于飞行模式下一般会造成这种结果,可以试着重启手机";
                            }
                        } else {
                            result = "";
                        }
                        subscriber.onNext(result);
                        subscriber.onCompleted();
                        locationService.stop();
                    }
                });
                locationService.setLocationOption(locationService.getDefaultLocationClientOption());
                locationService.start();
            }
        })
                .compose(context.<String>bindToLifecycle())
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .compose(context.bindUntilEvent(ActivityEvent.DESTROY))
                .subscribe(subscriber);
    }
}

// Subscriber观察者
public class LocationSubscribe extends Subscriber<String> {
    private Context context;

    public LocationSubscribe(Context context) {
        this.context = context;
    }

    @Override
    public void onCompleted() {


    }

    @Override
    public void onError(Throwable e) {

    }

    @Override
    public void onNext(final String s) {
        if (s != null && !s.equals(""))
            new AlertDialog.Builder(context).setTitle("当前定位").setMessage(s).setPositiveButton("确定", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    SPUtil.setGPSCity(s);
                }
            }).show();
    }

}


//在Activity中订阅,在Activity中对权限进行检查
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            ArrayList<String> permissions = new ArrayList<>();
             //定位权限为必须权限,用户如果禁止,则每次进入都会申请
            // 定位精确位置
            if (checkSelfPermission(Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
                permissions.add(Manifest.permission.ACCESS_FINE_LOCATION);
            }
            if (checkSelfPermission(Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
                permissions.add(Manifest.permission.ACCESS_COARSE_LOCATION);
            }

            if (permissions.size() > 0) {
                requestPermissions(permissions.toArray(new String[permissions.size()]), SDK_PERMISSION_REQUEST);
            }
}

    @TargetApi(23)
    @Override
    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
        // TODO Auto-generated method stub
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);

    }

LocationObservable.getLocation(this,(MyApplication)getApplication(),new LocationSubscribe(this));


//在MyApplication中的初始化SDK
        locationService = new LocationService(getApplicationContext());
        mVibrator = (Vibrator) getApplicationContext().getSystemService(VIBRATOR_SERVICE);
        SDKInitializer.initialize(getApplicationContext());





huiyun-yoyo
粉丝 1
博文 43
码字总数 33793
作品 0
瑞安
程序员
私信 提问
加载中
请先登录后再评论。

暂无文章

【c++灵魂科普】(1) 第一部分第一章-初识c++语言

今天带来一篇灵魂科普~ 主要是认识c++语言~话不多说 走起! 【全是干货!】 第一节 c++语言简介 信息学奥林匹克竞赛是一项益智性的竞赛活动,核心是考查选手的智力和使用计算机解题的能力,选...

osc_facwbzof
21分钟前
13
0
谈谈AMD CPU购机心得 与 写代码的感受

序 之前用的是华硕飞行保垒。具体是几代忘记了。。I7 4代的标压CUP。 8G内存 换成了联想yoga 14s。 换电脑的原因 网卡问题,老旧的网卡争网络实在争不过别人。每次看别人网络很好,我却连不上...

osc_0m0d4mbq
22分钟前
0
0
springboot 定时任务

一、在 DemoApplycation.java 写入如下代码 package com.taven.demo;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootA......

tavenpy
23分钟前
8
0
2020年8月中国编程语言排行榜

编程语言比例(市场份额) 工资 排名 编程语言 平均工资 中位数 最低()95% 最高(95%) 人数 百分比 1 julia 22539 22500 9000 37500 17 0.00% 2 rust 20987 18500 5371 45000 548 0.11% 3 scal...

osc_kvcz9ju6
23分钟前
12
0
北风在这里给大家拜年了!!!祝大家2020鼠年大吉!忠心祝愿❤在新的一年里:工作的朋友工作顺利,还在读书的童鞋硕果累累,学技术的伙伴技术更上一层楼!同时祝大家2020百毒不侵!😄最后:武汉...

本文分享自微信公众号 - 北风IT之路(beifengtz)。 如有侵权,请联系 support@oschina.cn 删除。 本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。...

beifengtz
01/24
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部