ai集成 android
2018-02-06 05:49:00 weixin_33724046 阅读数 42

XSize

本文知识点简介:

  • 关于百度文字识别的集成

最近看到百度AI方面的知识有关于文字识别的内容,于是感兴趣集成了一下,特此记录了一下:

百度文字识别的集成

  • 百度AI开放平台注册账号
  • 下载相应的SDK并导入项目(参见百度说明内容)
  • 创建相应的项目(这里注意创建项目的时候要填写相应的包名)
  • 下载相应的License文件(这个是放在相应assets文件夹下面的)
  • 初始化相应的内容
  • 实现文字识别功能

1.注册账号略

2.导入相应的SDK(参见说明内容)

  • (必须)将下载包libs目录中的ocr-sdk.jar文件拷贝到工程libs目录中,并加入工程依赖。
  • (必须)将libs目录下armeabi,arm64-v8a,armeabi-v7a,x86文件夹按需添加到android studio工程src/main/jniLibs目录中

3.创建相应的项目

这里创建的部分就省略了,但是有一个问题还是值得说明一下的,当你创建完成项目的时候,应该i心啊在相应的License文件,这个文件的目的是为了安全性,文档上写的是可以有两种方法进行相应的初始化,但是我发现不安全的那种方式已经使用不了了,所以还是乖乖的听话下载吧,下载好之后放在相应的assets文件夹下面就可以了.

4.初始化相应的内容

其实一般这种三方项目都是单例的,而且初始化都是在Application中进行的,这里也不例外;看一下初始化的代码:

OCR.getInstance().initAccessToken(new OnResultListener<AccessToken>() {
    @Override
    public void onResult(AccessToken result) {
        // 调用成功,返回AccessToken对象
        String token = result.getAccessToken();
    }
    @Override
    public void onError(OCRError error) {
        // 调用失败,返回OCRError子类SDKError对象
    }
}, this);

我是在Application中执行的初始化操作,所以第二个参数传的是一个this,如果你是在相应的Activity中执行的,这里要传全局的上下文.返回的Token什么作用我还没有研究,反正我在集成相应的内容的时候是没有用到的.

5.实现文字识别功能

由于我在集成的时候没有集成相应的UI库,所以我这里直接从手机里面取出一张图片进行相应操作的.主要是懒,就没有相应的集成,感兴趣的可以集成一下试试,我是没有尝试,所以这里不再过多说关于UI的问题了.我感觉我写的不会比他们好,其实下载的内容中是有相应的Demo的.

5.1通用文字识别

先上实例代码在进行讲解:

        /*设置相应的参数内容,这里主要是设置路径和*/
        GeneralBasicParams param = new GeneralBasicParams();
        param.setDetectDirection(true);//检测朝向的,这个在说明文档中都有
        param.setImageFile(new File(Environment.getExternalStorageDirectory().getPath() + "/timg.jpg"));

        // 调用通用文字识别服务
        OCR.getInstance().recognizeGeneralBasic(param, new OnResultListener<GeneralResult>() {
            @Override
            public void onResult(GeneralResult result) {
                Log.e(TAG, "onResult: " + result.getJsonRes());
                Gson gson = new Gson();
                WordsBean wordsBean = gson.fromJson(result.getJsonRes(), WordsBean.class);
                List<WordsBean.WordsResultBean> words_result = wordsBean.getWords_result();
                StringBuffer sb = new StringBuffer();
                for (int i = 0; i < words_result.size(); i++) {
                    sb.append(words_result.get(i).getWords());
                }
                Log.e(TAG, "onResult: " + sb.toString());
            }

            @Override
            public void onError(OCRError error) {
                // 调用失败,返回OCRError对象
            }
        });

前半部分主要是设置相应的参数内容,主要是Android根目录下的一张图片,这里的图片你可以自己去网上找一张就行,百度中说的大小是不大于4M,其实在说明文档中还有两个相应的方法是设置语言和是否检测语言的方法,做国际化的可以尝试一下;
后半部分就是相应实现通用文字识别的代码了,其实代码很简单通过一个相应的回调进行返回识别的文字,这里注意一下WordsBean这个类是我根据返回的json格式自己生成的,返回的GeneralResult类没有什么参数,主要是是返回相应的识别内容的,但是这里是给一个数组,所以内容你可以用StringBuffer进行一下拼接就可以打印出来了.

其实剩下的内容基本上文档都有,但是上面这个我尝试了,没有什么坑,剩下的内容还没有去尝试,等尝试完成之后在写下来吧,否则怕有什么坑让大家踩到!

2018-02-28 15:58:15 HotSmoking 阅读数 5485

最近应老板要求,接下来的工作要往人脸识别方向发展,于是我和android小伙伴们就一起走上了探索人脸识别的道路。。。。。。。。。。。。

、、、、、、、按照集成步骤申请完   AppIDAPI KeySecret Key以及人脸SDK License(大坑)

 

按照步骤完成申请认证工作后  接下来就是下载demo看一下运行效果  

谁知道遇到了一个自己挖的坑   怎么也跳不出来了,我的小伙伴在坑里面呆了大概一周  

所有的授权配置完成后  我们都感觉没问题  但是他还是会报错  说什么 MD5 前面的和后面的不一致

注意了小伙伴们 下面的这几个问题 是你们自己挖的坑   我要帮你们填坑了。

 

(2)FaceSDK-LicenseLICENSE_INFO_CHECK_ERROR =license id

licenseID为您申请时填appname+“_face_android”。如下图demo-turnstile-face-android为license里面的licenseID, demo-turnstile-face-android1为app运行时Config.licenseID,两者必须一致

(3)FaceSDK-LicenseLICENSE_INFO_CHECK_ERROR =signature md5

md5不一致错误,签名的为license里面的md5,后面的为app运行时获取的签名文件的md5,这两个md5必须一致且区分大小写。

(4)FaceSDK-License LICENSE_INFO_CHECK_ERROR =package name

PackageName不一致错误。License里面的packagename为申请license时填的,需要保证和app里面的packagename一致。

//凡是出现以上错误 就是你的签名文件不正确(这句话很重要)

不废话直接上图

这个文件很重要 ,错误就在这里 不是你下载下来demo再签名的jks文件 而是你在申请百度FaceSDK-License的时候第一次创建的空项目的签名文件  一定要保留然后粘到你下载的demo中。

 

一旦你申请了之后  你的签名的keyAlias就是你最初签名的那个keyAlias  

 

debug {
    keyAlias 'face'
    keyPassword '.....'
    storeFile file('D:/BaiduFaceSDKAndroid/facekey.jks')
    storePassword('.....')
}
release {
    keyAlias 'face'
    keyPassword '.....'
    storeFile file('D:/BaiduFaceSDKAndroid/facekey.jks')
    storePassword('.....')
}

 


 

 

 

 
希望能帮助自己给自己挖坑的小朋友      

 

 

 

 

2016-03-11 17:09:20 Primer01 阅读数 579
PS:部分图片为非原创

一、原理
做什么事情都要首先要把原理搞清楚,不然会走很多弯路,而且有些弯路是走了回不了头的。
1、支付信息通讯使用的是非对称加密技术,意思钥匙有两把,其中一把对数据进行加密后,需要使用另外一把钥匙才能将其解密,也就是公钥(public key)和私钥(private key)。
2、商户生成的公钥和私钥:通过openssl工具生成公钥和私钥,然后将该公钥上传到支付宝商家后台,支付时,客户端使用该私钥对支付订单信息加密,支付宝服务端收到该加密信息后会拿商户后台上传的公钥对该信息进行解密。

3、支付宝生成的公钥和私钥:支付成功后要回调,那么支付宝服务端会拿私钥对该回调信息进行加密,商家收到该信息会拿支付宝的公钥进行解密。 


二、官方参考

三、具体操作:
1、生成自己的公钥和私钥
根据官网的指引我们下载了openssl工具,运行之后输入以下命令:
OpenSSL> genrsa -out rsa_private_key.pem 1024 生成私钥
OpenSSL> rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem 生成公钥

如果你的服务端开发语言是java,那还需要生成PKCS8格式的私钥:
OpenSSL> pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform PEM -nocrypt

2、上传自己的公钥到支付宝商家后台
2.1、登录支付宝商家服务:https://b.alipay.com/newIndex.htm  ,点击进去“查询PID、Key”,当然这过程要输入支付密码。 


2.2、这里可以看到RSA加密选项,因为我已经上传所以显示的是“查看密钥”,如果未上传是显示“添加密钥”,点击“添加密钥”。


2.3、我们打开之前生成的公钥,然后填入下图中的对话框的格式是这样的



注意:上传的公钥是一行格式,不允许有注释、空格、换行等!


转换前pem文件格式:
-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDQWiDVZ7XYxa4CQsZoB3n7bfxL
DkeGKjyQPt2FUtm4TWX9OYrd523iw6UUqnQ+Evfw88JgRnhyXadp+vnPKP7unorm
YQAfsM/CxzrfMoVdtwSiGtIJB4pfyRXjA+KL8nIa2hdQy5nLfgPVGZN4WidfUY/Q
pkddCVXnZ4bAUaQjXQIDAQAB
-----END PUBLIC KEY-----
转换后的字符串:
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDQWiDVZ7XYxa4CQsZoB3n7bfxLDkeGKjyQPt2FUtm4TWX9OYrd523iw6UUqnQ+Evfw88JgRnhyXadp+vnPKP7unormYQAfsM/CxzrfMoVdtwSiGtIJB4pfyRXjA+KL8nIa2hdQy5nLfgPVGZN4WidfUY/QpkddCVXnZ4bAUaQjXQIDAQAB

2.4、同时我们也需要把支付宝的公钥拿回来,即点击“查看支付宝公钥”即可看到。


3、如果准确无误进行了以上操作,我们就完成了:1、把自己的公钥上传到商家服务后台;2、拿到了支付宝的公钥,剩下的工作就是开发了。

3.1、开发来说,为了安全我们一般会把加密过程交给服务端去做,因此作为APP开发者你只需要把之前生成的密钥和支付宝的公钥交给服务端开发人员;

3.2、APP开发是这么个过程,用户点击支付,你将订单信息告诉服务端,服务端拿着之前的密钥对订单信息加密后返回给你,你这边调用支付宝的SDK即可。

3.3、剩下的就是监听了,支付宝SDK会给个回调给APP,但是这个不完全准确,另外支付宝服务端也会给个回调给我们的服务端,这个就比较准确了。 


2015-04-09 15:47:31 fangchao3652 阅读数 2690

一.到支付宝官网https://b.alipay.com/order/techService.htm?channel=psl下载(快捷支付(无线))开发包。将alipay-sdk-common文件夹下的alipaysdk.jar ,alipaysecsdk.jar,alipaysecsdk.jar 拷贝到工程的libs下。

二.支付宝集成
在技术集成之前,商户需要在https://ms.alipay.com进行注册,并签约安全支付服务。签约成功后可获取支付宝分配的合作商户ID(PartnerID),账户ID(SellerID),调用接口时使用。

支付细节的实现,主要通过支付宝提供的一个支付安全服务安装包alipay_plugin_20120428msp.apk,首次使用,首先检查是否安装此插件,没有会提示安装。具体的支付细节,在这个插件内完成。大部分的支付平台也都是采用的这种方式。

调用支付宝的接口进行支付,主要有以下几个步骤

  1. 将商户ID,收款帐号,外部订单号,商品名称,商品介绍,价格,通知地址封装成订单信息

  2. 对订单信息进行签名

  3. 将订单信息,签名,签名方式封装成请求参数

  4. 调用pay方法。
    下面我们就从点击支付按钮开始:

ResultSingleBean rb6 = (ResultSingleBean) VolleyResponseHelper
                        .jsonToBean(response, 43);
                if (rb6.getRetCode() == 0) {

                    final PayDataBean bean = (PayDataBean) rb6.getRetObj();
                    new Thread() {
                        public void run() {
                            PayTask alipay = new PayTask(OrderDetailActivity.this);
                            // 设置为沙箱模式,不设置默认为线上环境
                            // alipay.setSandBox(true);
                            String result = alipay.pay(bean.getPayData());
                            Message msg = new Message();
                            msg.what = RQF_PAY;
                            msg.obj = result;
                            CommonUtils.logWrite("pay  result1111111111",result);
                            mHandler.sendMessage(msg);
                        }
                    }.start();
                } else {
                    CustomToast.showToast(rb6.getRetMessage(), OrderDetailActivity.this);

                }
    }

上面我将一些pay 方法需要的一些参数封装到bean 当中,实际开发中这个bean中的数据最好去从服务器获取,保证与支付宝平台数据的同步。
我们现在来看一下 pay()需要的参数:
主要包含商户的订单信息,key=”value”形式,以&连接。 支付参数示例如下: partner=”2088101568358171”&seller_id=”xxx@alipay.com”&out_trade_no=”0819145 412-6177”&subject=”商品名称”&body=”商品详情 “&total_fee=”0.01总金额”&notify_url=”http://notify.msp.hk/notify.htm用于通知服务器进行相关操作”&service=”mobile.securi typay.pay”&payment_type=”1”&_input_charset=”utf-8”&it_b_pay=”30m”&sign=”lBBK %2F0w5LOajrMrji7DUgEqNjIhQbidR13GovA5r3TgIbNqv231yC1NksLdw%2Ba3JnfH XoXuet6XNNHtn7VE%2BeCoRO1O%2BR1KugLrQEZMtG5jmJIe2pbjm%2F3kb%2F uGkpG%2BwYQYI51%2BhA3YBbvZHVQBYveBqK%2Bh8mUyb7GM1HxWs9k4%3D “&sign_type=”RSA”

若调用成功返回结果示例如下:
resultStatus={9000};memo={};result={partner=”2088101568358171”&seller_id= “xxx@alipay.com”&out_trade_no=”0819145412-6177”&subject=”测试”&body=”测试 测 试 “&total_fee=”0.01”&notify_url=”http://notify.msp.hk/notify.htm”&service=” mobile.securitypay.pay”&payment_type=”1”&_input_charset=”utf-8”&it_b_pay= “30m”&success=”true”&sign_type=”RSA”&sign=”hkFZr+zE9499nuqDNLZEF7W75RFFPs ly876QuRSeN8WMaUgcdR00IKy5ZyBJ4eldhoJ/2zghqrD4E2G2mNjs3aE+HCLiBXrPDNdLKCZ gSOIqmv46TfPTEqopYfhs+o5fZzXxt34fwdrzN4mX6S13cr3UwmEV4L3Ffir/02RBVtU=”}

具体参数请参考刚刚下载的sdk所附文档。

问了方便 我们将返回结果进行处理:

public class AliPayResult {
    static String str = "resultStatus={9000};memo={};result={partner=\"2088201363678709\"&seller_id=\"2088201363678709\"&out_trade_no=\"7078994\"&subject=\"速普商城订单No:7078994\"&body=\"0105041067 MOONY 尤妮佳 原装进口婴儿纸尿裤 L54片 *1\"&total_fee=\"0.01\"&notify_url=\"http%3a%2f%2fwww.supuy.com%2fbank%2fAlipay_MobileNotify_V2.aspx\"&service=\"mobile.securitypay.pay\"&payment_type=\"1\"&_input_charset=\"utf-8\"&it_b_pay=\"60m\"&success=\"true\"&sign_type=\"RSA\"&sign=\"WxHHLaeqXcoyViBJyQV1a2+luhry9umGDLnjSX4HrcH6Q6Un75KJwIT1QAWnHcXrVOPcAT9xD8Sk923SjUkQRA0VDh29IPNA26FV+aaxV5yMyPP/kBF+oKiQy01LhQswTZDTF7k21SR2PNEdjXFnHzQJvzjthILbgJp7aEASwLM=\"}";

    public static void main(String[] args) {
        AliPayResult result = new AliPayResult(str);
        result.getResult();
    }

    private static final Map<String, String> sResultStatus;

    private String mResult;

    String resultStatus = null;
    String memo = null;
    String result = null;
    boolean isSignOk = false;

    public AliPayResult(String result) {
        this.mResult = result;
    }

    static {
        sResultStatus = new HashMap<String, String>();
        sResultStatus.put("{9000}", "支付成功");
        sResultStatus.put("{4000}", "系统异常");
        sResultStatus.put("{4001}", "订单参数错误");
        sResultStatus.put("{6001}", "您已取消了本次订单的支付");
        sResultStatus.put("{6002}", "网络连接异常");
    }

    /**
     * 获取支付宝返回的支付状态信息
     * 
     * @return
     */
    public String getResult() {
        AliPayResultBean bean = Json2Bean(string2JSON(mResult, ";"));
        return sResultStatus.get(bean.getResultStatus());
    }

    private AliPayResultBean Json2Bean(JSONObject json) {
        Gson gson = new Gson();
        return gson.fromJson(json.toString(), AliPayResultBean.class);
    }

    public JSONObject string2JSON(String src, String split) {
        JSONObject json = new JSONObject();

        try {
            String[] arr = src.split(split);
            for (int i = 0; i < arr.length; i++) {
                String[] arrKey = arr[i].split("=");
                json.put(arrKey[0], arr[i].substring(arrKey[0].length() + 1));
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

        return json;
    }

    private String getContent(String src, String startTag, String endTag) {
        String content = src;
        int start = src.indexOf(startTag);
        start += startTag.length();

        try {
            if (endTag != null) {
                int end = src.indexOf(endTag);
                content = src.substring(start, end);
            } else {
                content = src.substring(start);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

        return content;
    }
}

返回结果封装:

public class AliPayResultBean extends BaseBean {

    /**
     * 状态代码 String 本次操作的状态返回值,标 识本次调用的结果,参见 “11.2 客户端错误码”。 不可空 9000
     */
    private String resultStatus;
    /**
     * 提示信息 String 保留参数,一般无内容。 可空
     */
    private String memo;
    /**
     * 本次操作 返回的结 果数据 本次操作返回的结果数据。 其中: &success="true"&sign_typ
     * e="RSA"&sign="xxx"之前 的部分为商户的原始数据。 success用来标识本次支付 结果。 sign="xxx"为支付宝对本次
     * 支付结果的签名,商户可以 使用签约时支付宝提供的 公钥进行验证。 不可空 partner="2088101568358
     * 171"&seller_id="alipay-te st09@alipay.com"&out_tr ade_no="0819145412-61
     * 77"&subject="《暗黑破坏 神 3:凯恩之书》"&body=" 暴雪唯一官方授权中文版! 玩家必藏!附赠暗黑精致手
     * 绘地图!绝不仅仅是一本暗 黑的故事或画册,而是一 个栩栩如生的游戏再现。 是游戏玩家珍藏的首选。
     * "&total_fee="0.01"&notify _url="http%3A%2F%2Fn otify.msp.hk%2Fnotify.ht
     * m"&service="mobile.secu ritypay.pay"&payment_ty pe="1"&_input_charset="
     * utf-8"&it_b_pay="30m"&s how_url="m.alipay.com"& success="true"&sign_typ
     * e="RSA"&sign="hkFZr+z E9499nuqDNLZEF7W75 RFFPsly876QuRSeN8W
     * MaUgcdR00IKy5ZyBJ4el dhoJ/2zghqrD4E2G2mNj s3aE+HCLiBXrPDNdLKC
     * ZgSOIqmv46TfPTEqopYf hs+o5fZzXxt34fwdrzN4m X6S13cr3UwmEV4L3Ffir
     * /02RBVtU="
     */
    private String result;

    public String getResultStatus() {
        return resultStatus;
    }

    public void setResultStatus(String resultStatus) {
        this.resultStatus = resultStatus;
    }

    public String getMemo() {
        return memo;
    }

    public void setMemo(String memo) {
        this.memo = memo;
    }

    public String getResult() {
        return result;
    }

    public void setResult(String result) {
        this.result = result;
    }

}

注意:
调用了支付服务之后,有两种方式返回交易结果:

  1. 支付结果作为接口返回的字符串返回。返回的参数包含在result字符串中,具体再进行解析。

  2. 支付宝服务器通知。商户需要提供一个http协议的接口,包含在参数里传递给安全支付,即notify_url。支付宝服务器在支付完成后,会用POST方法调用notufy_url,以xml为数据格式传输支付结果,然后支付宝回传的参数修改订单状态等操作。需要注意的是,商户服务器收到支付宝发的通知之后,需要返回一个纯字符串“success”,不然支付宝的服务器会持续调用七次回调url提供的接口。

2018-04-19 10:24:13 hzy670800844 阅读数 57
 <!-- 这个权限用于进行网络定位-->
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"></uses-permission>
    <!-- 这个权限用于访问GPS定位-->
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>
    <!-- 用于访问wifi网络信息,wifi信息会用于进行网络定位-->
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>
    <!-- 获取运营商信息,用于支持提供运营商信息相关的接口-->
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
    <!-- 这个权限用于获取wifi的获取权限,wifi信息会用来进行网络定位-->
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission>
    <!-- 用于读取手机当前的状态-->
    <uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission>
    <!-- 写入扩展存储,向扩展卡写入数据,用于写入离线定位数据-->
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
    <!-- 访问网络,网络定位需要上网-->
    <uses-permission android:name="android.permission.INTERNET" />
    <!-- SD卡读取权限,用户写入离线定位数据-->
    <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"></uses-permission>

    <uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" />
    <uses-permission android:name="android.permission.WAKE_LOCK"/>
    <uses-permission android:name="android.permission.GET_TASKS" />
    <uses-permission android:name="android.permission.WRITE_SETTINGS" />
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

放到AndroidManifest.xml的 application里边就行啦

 <service android:name="com.baidu.location.f" android:enabled="true" android:process=":remote">
        </service>
        <meta-data
            android:name="com.baidu.lbsapi.API_KEY"
            android:value="ugEXhO2214IxgfIymSG7uHLeZIbQ0WLu" />       //key:开发者申请的Key
  • 1
  • 2
  • 3
  • 4
  • 5

布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity">

    <Button
        android:id="@+id/btnLocation"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="定位"/>

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

</LinearLayout>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

MainActivity类

public class MainActivity extends AppCompatActivity {
    private Button btnLocation;
    // 百度地图控件
    private MapView mMapView = null;
    // 百度地图对象
    private BaiduMap mBaiduMap;
    // 是否首次定位
    boolean isFirstLocation = true;
    // 定位相关
    LocationClient mLocationClient;
    private String path;
    public MyLocationListenner myListener = new MyLocationListenner();

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

        initView();
        setListener();

    }

    private void setListener() {
        btnLocation.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // 开启定位图层
                mBaiduMap.setMyLocationEnabled(true);
                // 定位初始化
                mLocationClient = new LocationClient(MainActivity.this);
                mLocationClient.registerLocationListener(myListener);
                LocationClientOption option = new LocationClientOption();
                //设置获得地址位置
                option.setIsNeedAddress(true);
                //设置获得poi
                option.setIsNeedLocationPoiList(true);
                // 打开gps
                option.setOpenGps(true);
                // 设置坐标类型
                option.setCoorType("bd09ll");
                option.setScanSpan(1000);
                mLocationClient.setLocOption(option);
                mLocationClient.start();
            }
        });
    }

    private void initView() {
        btnLocation = (Button) findViewById(R.id.btnLocation);
        //获取地图控件引用
        mMapView = (MapView) findViewById(R.id.bmapView);
        mBaiduMap = mMapView.getMap();
        //普通地图
        mBaiduMap.setMapType(BaiduMap.MAP_TYPE_NORMAL);
        //设置热力图
        //mBaiduMap.setBaiduHeatMapEnabled(true);
        //设置交通图
        mBaiduMap.setTrafficEnabled(true);
    }

    @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();
    }

    /**
     * 定位SDK监听函数
     */
    public class MyLocationListenner implements BDLocationListener {

        @Override
        public void onReceiveLocation(BDLocation location) {
            String str = "定位的信息:"+location.getAddress().address+",纬度:"+location.getLatitude();
            //Toast.makeText(MainActivity.this,"纬度:"+location.getLatitude()+"经度"+location.getLongitude(),Toast.LENGTH_LONG).show();
            List list = location.getPoiList();
            str += ",poi数量:"+list.size()+",第一个:"+((Poi)(list.get(0))).getName();
            path = location.getAddress().address;
            Log.e("=====", str);

            // map view 销毁后不在处理新接收的位置
            if (location == null || mMapView == null) {
                return;
            }
            MyLocationData locData = new MyLocationData.Builder()
                    .accuracy(location.getRadius())
                    // 此处设置开发者获取到的方向信息,顺时针0-360
                    .direction(5).latitude(location.getLatitude())
                    .longitude(location.getLongitude()).build();
            mBaiduMap.setMyLocationData(locData);
            if (isFirstLocation) {
                isFirstLocation = false;
                LatLng ll = new LatLng(location.getLatitude(),
                        location.getLongitude());
                MapStatus.Builder builder = new MapStatus.Builder();
                builder.target(ll).zoom(18.0f);
                mBaiduMap.animateMapStatus(MapStatusUpdateFactory.newMapStatus(builder.build()));
            }
        }


        public void onConnectHotSpotMessage(String str, int i) {

        }

    }

}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121
  • 122
  • 123
  • 124
  • 125
  • 126
  • 127
                                            <link rel="stylesheet" href="https://csdnimg.cn/release/phoenix/production/markdown_views-ea0013b516.css">
                                </div>

android集成微信支付

阅读数 734

这里分享下android端集成微信支付的步骤。一、首先到官网https://open.weixin.qq.com/创建一个应用,审核说是7天内。通过后获取AppID就可以进行愉快的开发了。二、基本步骤就是移动端拼接好后天需要的购物车信息,后台返回随机验证码以及第三方的商家号,生成订单。然后我们再通过随机验证码以及第三方的商家号,确认支付信息,获取微信支付需要的一些参数,进行支付就可以了。然后会有一个

博文 来自: z_zT_T

android 语音集成

阅读数 87

讯飞语音开发集成地址http://www.xfyun.cn/&nbsp;解压后的doc文件夹下的mscdevelop文件中有详细集成步骤&nbsp;&nbsp;AppId:&nbsp;1.先要注册开发者账户,添加我的应用,下载sdk2.下载后将sdk解压,把案例导入工程中运行看看效果&...

博文 来自: YZJ_0722

android集成高德地图

阅读数 118

一,账号与Key的申请注册成为高德开发者需要分三步: 第一步,注册高德开发者;第二步,去控制台创建应用;第三步,获取Key。 前2步都比较简单,这里说下第三步。获取Key1、进入控制台,创建一个新应用。如果您之前已经创建过应用,可直接跳过这个步骤。  2、在创建的应用上点击”添加新Key”按钮,在弹出的对话框中,依次:输入应用名名称,选择绑定的服务为“Android平台SDK”,输入发布版安全码...

博文 来自: Xin_zang

Android 微信支付集成

阅读数 192

最近在做微信支付,真心被坑。

博文 来自: zbcll2012

Android集成XMPP

阅读数 1189

先上图:

博文 来自: logicsboy
没有更多推荐了,返回首页