Android(安卓)调用谷歌语音识别
16lz
2021-12-04
Android 调用谷歌语音识别
分类:Android 学习 2013-09-05 16:32 759人阅读 评论(0) 收藏 举报調用谷歌语音识别其实很简单,直接利用 intent 跳转到手机里面的谷歌搜索
代码也很简单,直接调用方法 startVoiceRecognitionActivity()
如果大家手机里面没有谷歌搜索,这里会弹出一个下载框给我们选择下载
识别完成后,得到result List数组,里面有很多识别结果,我们获取第一个就可以了
贴出代码:
[java] view plain copy
- /**
- *調用方法
- */
- privatevoidstartVoiceRecognitionActivity(){
- try{
- //通过Intent传递语音识别的模式,开启语音
- Intentintent=newIntent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
- //语言模式和自由模式的语音识别
- intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,
- RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
- //提示语音开始
- intent.putExtra(RecognizerIntent.EXTRA_PROMPT,"开始语音");
- intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE,"zh-HK");
- //开始语音识别
- startActivityForResult(intent,VOICE_RECOGNITION_REQUEST_CODE);
- }catch(Exceptione){
- e.printStackTrace();
- showDialog();
- }
- }
- privatevoidshowDialog(){
- AlertDialog.Builderbuilder=newBuilder(MainActivity.this);
- builder.setMessage(R.string.dialog_content);
- builder.setTitle(R.string.dialog_title);
- builder.setNegativeButton(R.string.download,
- newandroid.content.DialogInterface.OnClickListener(){
- @Override
- publicvoidonClick(DialogInterfacedialog,intwhich){
- dialog.dismiss();
- Uriuri=Uri.parse(getApplication().getString(R.string.voice_url));
- Intentit=newIntent(Intent.ACTION_VIEW,uri);
- startActivity(it);
- }
- });
- builder.setPositiveButton(R.string.cancel,
- newandroid.content.DialogInterface.OnClickListener(){
- @Override
- publicvoidonClick(DialogInterfacedialog,intwhich){
- dialog.dismiss();
- }
- });
- builder.create().show();
- }
- protectedvoidonActivityResult(intrequestCode,intresultCode,Intentdata){
- if(requestCode==VOICE_RECOGNITION_REQUEST_CODE
- &&resultCode==RESULT_OK){
- ArrayList<String>results=data
- .getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS);
- if(results.size()>0){
- voiceView.setText(results.get(0));
- }else{
- Utils.getInstance().showTextToast("檢測失敗,請重新點擊識別!",context);
- }
- }
- }
[html] view plain copy
- <stringname="voice_url">https://play.google.com/store/apps/details?id=com.google.android.voicesearch</string>
- <stringname="dialog_title">提示</string>
- <stringname="dialog_content">未找到語音識別設備,是否下載?</string>
- <stringname="cancel">取消</string>
- <stringname="download">下載</string>
Android Google Maps API 网络服务用于网络定位、计算路线、获取经纬度、获取详细地址等
分类: Android 学习 2013-10-09 14:51 1324人阅读 评论(1) 收藏 举报Google Maps API 网络服务
官网地址 :
https://developers.google.com/maps/documentation/webservices/?hl=zh-cn
其实就是一些接口,供我们调用,如:
1、根据地址获取经纬度
http://maps.google.com/maps/api/geocode/json?address=北京&language=zh-CN&sensor=false
2、计算路线数据
http://maps.googleapis.com/maps/api/directions/json?origin=北京&destination=上海&sensor=false&mode=driving
3、根据经纬度获取详细地址
http://maps.google.com/maps/api/geocode/json?latlng="latlng"&language=zh-CN&sensor=false
等等还有很多,大家可以自己去找找
给大家介绍一下如果利用这些接口
实现网络定位:
首先获取经纬度
[java] view plain copy print ?- /**
- * 獲取本地
- * @param context
- * @return
- */
- public String getLocation(Context context){
- LocationManager lm = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
- // 返回所有已知的位置提供者的名称列表,包括未获准访问或调用活动目前已停用的。
- //List<String> lp = lm.getAllProviders();
- Criteria criteria = new Criteria();
- criteria.setCostAllowed(false);
- //设置位置服务免费
- criteria.setAccuracy(Criteria.ACCURACY_COARSE); //设置水平位置精度
- //getBestProvider 只有允许访问调用活动的位置供应商将被返回
- String providerName = lm.getBestProvider(criteria, true);
- if (providerName != null)
- {
- Location location = lm.getLastKnownLocation(providerName);
- if(location!=null){
- //获取维度信息
- double latitude = location.getLatitude();
- //获取经度信息
- double longitude = location.getLongitude();
- return latitude+","+longitude;
- }
- }
- return "";
- }
调用API,我这里写了一个工具类 [java] view plain copy print ?
- package com.techrare.utils;
- import java.io.IOException;
- import java.io.UnsupportedEncodingException;
- import java.util.ArrayList;
- import java.util.List;
- import java.util.Map;
- import org.apache.http.HttpResponse;
- import org.apache.http.NameValuePair;
- import org.apache.http.ParseException;
- import org.apache.http.client.ClientProtocolException;
- import org.apache.http.client.HttpClient;
- import org.apache.http.client.entity.UrlEncodedFormEntity;
- import org.apache.http.client.methods.HttpPost;
- import org.apache.http.impl.client.DefaultHttpClient;
- import org.apache.http.message.BasicNameValuePair;
- import org.apache.http.protocol.HTTP;
- import org.apache.http.util.EntityUtils;
- public class MapsApiUtils {
- private static MapsApiUtils mapsApiUtils = new MapsApiUtils();
- /**
- * 单例模式
- *
- * @return
- */
- synchronized public static MapsApiUtils getInstance() {
- return mapsApiUtils;
- }
- /**
- * 根据API地址和参数获取响应对象HttpResponse
- *
- * @param params
- * @param url
- * @return
- */
- private HttpResponse post(Map<String, Object> params, String url) {
- HttpClient client = new DefaultHttpClient();
- HttpPost httpPost = new HttpPost(url);
- httpPost.addHeader("charset", HTTP.UTF_8);
- httpPost.setHeader("Content-Type",
- "application/x-www-form-urlencoded; charset=utf-8");
- HttpResponse response = null;
- if (params != null && params.size() > 0) {
- List<NameValuePair> nameValuepairs = new ArrayList<NameValuePair>();
- for (String key : params.keySet()) {
- nameValuepairs.add(new BasicNameValuePair(key, (String) params
- .get(key)));
- }
- try {
- httpPost.setEntity(new UrlEncodedFormEntity(nameValuepairs,
- HTTP.UTF_8));
- response = client.execute(httpPost);
- } catch (UnsupportedEncodingException e) {
- e.printStackTrace();
- } catch (ClientProtocolException e) {
- e.printStackTrace();
- } catch (IOException e) {
- e.printStackTrace();
- } catch (RuntimeException e) {
- e.printStackTrace();
- }
- } else {
- try {
- response = client.execute(httpPost);
- } catch (ClientProtocolException e) {
- e.printStackTrace();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- return response;
- }
- /**
- * 得到JSON值
- *
- * @param params
- * @param url
- * @return
- */
- private Object getValues(Map<String, Object> params, String url) {
- String token = "";
- HttpResponse response = post(params, url);
- if (response != null) {
- try {
- token = EntityUtils.toString(response.getEntity());
- response.removeHeaders("operator");
- } catch (ParseException e) {
- e.printStackTrace();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- return token;
- }
- /**
- * 根据google API 获取两地的路線
- * @param origin 起點
- * @param destination 終點
- * @param mode 出行方式 driving駕車, walking步行, bicycling自行車, transit公交車
- * @param sensor 是否来自装有位置传感器的设备 true Or false
- * @return
- */
- public Object getRoutes(String origin, String destination) {
- String url = "http://maps.googleapis.com/maps/api/directions/json?origin="+ origin +"&" +
- "destination="+ destination +"&sensor=false&mode=driving®ion=zh";
- return getValues(null, url);
- }
- /**
- * 根据經緯度 获取地理位置
- * LatLng 經緯度以逗號隔開 緯度,經度
- * @return
- */
- public Object getAddress(String latlng) {
- String url = "http://maps.google.com/maps/api/geocode/json?latlng="+
- latlng+"&language=zh-CN&sensor=false";
- return getValues(null, url);
- }
- /**
- * 根據地址獲取經緯度
- * @return
- */
- public Object getLatlng(String str) {
- String url = "http://maps.google.com/maps/api/geocode/json?address="+
- str+"&language=zh-CN&sensor=false";
- return getValues(null, url);
- }
- }
调用getAddress()方法 传递经纬度来获取详细地址 返回的是JSON字符串,大家解析一下就可以 [java] view plain copy print ?
- MapsApiUtils.getInstance().getAddress(getLocation(context));
計算路线数据
可以得到起点到终点的时间和路程
调用getRoutes() 方法,传起点和终点
[java] view plain copy print ?- MapsApiUtils.getInstance().getLatLng("39.90403,116.407526");
根据地址获取经纬度
[java] view plain copy print ?- MapsApiUtils.getInstance().getRoutes("北京","上海");
還有很多大家可以到官網上看看,也很容易理解的。
更多相关文章
- 【阿里云镜像】切换阿里巴巴开源镜像站镜像——Debian镜像
- android通过手机本身来获取经纬度等信息(不使用第三方地图)
- Android(安卓)JNI开发入门之二
- Android学习——Android(安卓)RIL结构分析与移植
- Android(安卓)动态加载APK--代码安装、获取资源及Intent调用已安
- Android:View的getLocalVisibleRect()和getGlobalVisibleRect()的区别
- Android获取手机信息
- Android遍历获取正在运行的服务(ActivityManager.RunningServiceI
- android获取解析GPS数据