Android 调用谷歌语音识别

分类:Android 学习 759人阅读 评论(0) 收藏 举报

調用谷歌语音识别其实很简单,直接利用 intent 跳转到手机里面的谷歌搜索

代码也很简单,直接调用方法 startVoiceRecognitionActivity()

如果大家手机里面没有谷歌搜索,这里会弹出一个下载框给我们选择下载

识别完成后,得到result List数组,里面有很多识别结果,我们获取第一个就可以了

贴出代码:

[java] view plain copy
  1. /**
  2. *調用方法
  3. */
  4. privatevoidstartVoiceRecognitionActivity(){
  5. try{
  6. //通过Intent传递语音识别的模式,开启语音
  7. Intentintent=newIntent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
  8. //语言模式和自由模式的语音识别
  9. intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,
  10. RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
  11. //提示语音开始
  12. intent.putExtra(RecognizerIntent.EXTRA_PROMPT,"开始语音");
  13. intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE,"zh-HK");
  14. //开始语音识别
  15. startActivityForResult(intent,VOICE_RECOGNITION_REQUEST_CODE);
  16. }catch(Exceptione){
  17. e.printStackTrace();
  18. showDialog();
  19. }
  20. }
  21. privatevoidshowDialog(){
  22. AlertDialog.Builderbuilder=newBuilder(MainActivity.this);
  23. builder.setMessage(R.string.dialog_content);
  24. builder.setTitle(R.string.dialog_title);
  25. builder.setNegativeButton(R.string.download,
  26. newandroid.content.DialogInterface.OnClickListener(){
  27. @Override
  28. publicvoidonClick(DialogInterfacedialog,intwhich){
  29. dialog.dismiss();
  30. Uriuri=Uri.parse(getApplication().getString(R.string.voice_url));
  31. Intentit=newIntent(Intent.ACTION_VIEW,uri);
  32. startActivity(it);
  33. }
  34. });
  35. builder.setPositiveButton(R.string.cancel,
  36. newandroid.content.DialogInterface.OnClickListener(){
  37. @Override
  38. publicvoidonClick(DialogInterfacedialog,intwhich){
  39. dialog.dismiss();
  40. }
  41. });
  42. builder.create().show();
  43. }
  44. protectedvoidonActivityResult(intrequestCode,intresultCode,Intentdata){
  45. if(requestCode==VOICE_RECOGNITION_REQUEST_CODE
  46. &&resultCode==RESULT_OK){
  47. ArrayList<String>results=data
  48. .getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS);
  49. if(results.size()>0){
  50. voiceView.setText(results.get(0));
  51. }else{
  52. Utils.getInstance().showTextToast("檢測失敗,請重新點擊識別!",context);
  53. }
  54. }
  55. }


[html] view plain copy
  1. <stringname="voice_url">https://play.google.com/store/apps/details?id=com.google.android.voicesearch</string>
  2. <stringname="dialog_title">提示</string>
  3. <stringname="dialog_content">未找到語音識別設備,是否下載?</string>
  4. <stringname="cancel">取消</string>
  5. <stringname="download">下載</string>

Android Google Maps API 网络服务用于网络定位、计算路线、获取经纬度、获取详细地址等

分类: Android 学习 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 ?
  1. /**
  2. * 獲取本地
  3. * @param context
  4. * @return
  5. */
  6. public String getLocation(Context context){
  7. LocationManager lm = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
  8. // 返回所有已知的位置提供者的名称列表,包括未获准访问或调用活动目前已停用的。
  9. //List<String> lp = lm.getAllProviders();
  10. Criteria criteria = new Criteria();
  11. criteria.setCostAllowed(false);
  12. //设置位置服务免费
  13. criteria.setAccuracy(Criteria.ACCURACY_COARSE); //设置水平位置精度
  14. //getBestProvider 只有允许访问调用活动的位置供应商将被返回
  15. String providerName = lm.getBestProvider(criteria, true);
  16. if (providerName != null)
  17. {
  18. Location location = lm.getLastKnownLocation(providerName);
  19. if(location!=null){
  20. //获取维度信息
  21. double latitude = location.getLatitude();
  22. //获取经度信息
  23. double longitude = location.getLongitude();
  24. return latitude+","+longitude;
  25. }
  26. }
  27. return "";
  28. }

调用API,我这里写了一个工具类

[java] view plain copy print ?
  1. package com.techrare.utils;
  2. import java.io.IOException;
  3. import java.io.UnsupportedEncodingException;
  4. import java.util.ArrayList;
  5. import java.util.List;
  6. import java.util.Map;
  7. import org.apache.http.HttpResponse;
  8. import org.apache.http.NameValuePair;
  9. import org.apache.http.ParseException;
  10. import org.apache.http.client.ClientProtocolException;
  11. import org.apache.http.client.HttpClient;
  12. import org.apache.http.client.entity.UrlEncodedFormEntity;
  13. import org.apache.http.client.methods.HttpPost;
  14. import org.apache.http.impl.client.DefaultHttpClient;
  15. import org.apache.http.message.BasicNameValuePair;
  16. import org.apache.http.protocol.HTTP;
  17. import org.apache.http.util.EntityUtils;
  18. public class MapsApiUtils {
  19. private static MapsApiUtils mapsApiUtils = new MapsApiUtils();
  20. /**
  21. * 单例模式
  22. *
  23. * @return
  24. */
  25. synchronized public static MapsApiUtils getInstance() {
  26. return mapsApiUtils;
  27. }
  28. /**
  29. * 根据API地址和参数获取响应对象HttpResponse
  30. *
  31. * @param params
  32. * @param url
  33. * @return
  34. */
  35. private HttpResponse post(Map<String, Object> params, String url) {
  36. HttpClient client = new DefaultHttpClient();
  37. HttpPost httpPost = new HttpPost(url);
  38. httpPost.addHeader("charset", HTTP.UTF_8);
  39. httpPost.setHeader("Content-Type",
  40. "application/x-www-form-urlencoded; charset=utf-8");
  41. HttpResponse response = null;
  42. if (params != null && params.size() > 0) {
  43. List<NameValuePair> nameValuepairs = new ArrayList<NameValuePair>();
  44. for (String key : params.keySet()) {
  45. nameValuepairs.add(new BasicNameValuePair(key, (String) params
  46. .get(key)));
  47. }
  48. try {
  49. httpPost.setEntity(new UrlEncodedFormEntity(nameValuepairs,
  50. HTTP.UTF_8));
  51. response = client.execute(httpPost);
  52. } catch (UnsupportedEncodingException e) {
  53. e.printStackTrace();
  54. } catch (ClientProtocolException e) {
  55. e.printStackTrace();
  56. } catch (IOException e) {
  57. e.printStackTrace();
  58. } catch (RuntimeException e) {
  59. e.printStackTrace();
  60. }
  61. } else {
  62. try {
  63. response = client.execute(httpPost);
  64. } catch (ClientProtocolException e) {
  65. e.printStackTrace();
  66. } catch (IOException e) {
  67. e.printStackTrace();
  68. }
  69. }
  70. return response;
  71. }
  72. /**
  73. * 得到JSON值
  74. *
  75. * @param params
  76. * @param url
  77. * @return
  78. */
  79. private Object getValues(Map<String, Object> params, String url) {
  80. String token = "";
  81. HttpResponse response = post(params, url);
  82. if (response != null) {
  83. try {
  84. token = EntityUtils.toString(response.getEntity());
  85. response.removeHeaders("operator");
  86. } catch (ParseException e) {
  87. e.printStackTrace();
  88. } catch (IOException e) {
  89. e.printStackTrace();
  90. }
  91. }
  92. return token;
  93. }
  94. /**
  95. * 根据google API 获取两地的路線
  96. * @param origin 起點
  97. * @param destination 終點
  98. * @param mode 出行方式 driving駕車, walking步行, bicycling自行車, transit公交車
  99. * @param sensor 是否来自装有位置传感器的设备 true Or false
  100. * @return
  101. */
  102. public Object getRoutes(String origin, String destination) {
  103. String url = "http://maps.googleapis.com/maps/api/directions/json?origin="+ origin +"&" +
  104. "destination="+ destination +"&sensor=false&mode=driving&region=zh";
  105. return getValues(null, url);
  106. }
  107. /**
  108. * 根据經緯度 获取地理位置
  109. * LatLng 經緯度以逗號隔開 緯度,經度
  110. * @return
  111. */
  112. public Object getAddress(String latlng) {
  113. String url = "http://maps.google.com/maps/api/geocode/json?latlng="+
  114. latlng+"&language=zh-CN&sensor=false";
  115. return getValues(null, url);
  116. }
  117. /**
  118. * 根據地址獲取經緯度
  119. * @return
  120. */
  121. public Object getLatlng(String str) {
  122. String url = "http://maps.google.com/maps/api/geocode/json?address="+
  123. str+"&language=zh-CN&sensor=false";
  124. return getValues(null, url);
  125. }
  126. }

调用getAddress()方法 传递经纬度来获取详细地址 返回的是JSON字符串,大家解析一下就可以

[java] view plain copy print ?
  1. MapsApiUtils.getInstance().getAddress(getLocation(context));

計算路线数据

可以得到起点到终点的时间和路程

调用getRoutes() 方法,传起点和终点

[java] view plain copy print ?
  1. MapsApiUtils.getInstance().getLatLng("39.90403,116.407526");

根据地址获取经纬度

[java] view plain copy print ?
  1. MapsApiUtils.getInstance().getRoutes("北京","上海");


還有很多大家可以到官網上看看,也很容易理解的。


更多相关文章

  1. 【阿里云镜像】切换阿里巴巴开源镜像站镜像——Debian镜像
  2. android通过手机本身来获取经纬度等信息(不使用第三方地图)
  3. Android(安卓)JNI开发入门之二
  4. Android学习——Android(安卓)RIL结构分析与移植
  5. Android(安卓)动态加载APK--代码安装、获取资源及Intent调用已安
  6. Android:View的getLocalVisibleRect()和getGlobalVisibleRect()的区别
  7. Android获取手机信息
  8. Android遍历获取正在运行的服务(ActivityManager.RunningServiceI
  9. android获取解析GPS数据

随机推荐

  1. Android 属性动画(Property Animation) 完
  2. Android版本和API Level对应关系
  3. 基于.NET/C#开发跨平台Windows Phone 7、
  4. Android异步处理
  5. Android ActivityManagerService禁用应用
  6. Android报表控件achartengine介绍(一)
  7. Android解压缩zip的实现
  8. QQ登陆及分享
  9. 手把手教你给Eclipse配制Android
  10. Android真机网络adb联机调试初探