android自带语音识别,Android如何实现自带谷歌语音识别垃圾分类APP

基于Android实现自带谷歌语音识别垃圾分类APP

此次做的项目是垃圾分类APP,涵盖内容各类垃圾的分类详情,关于软件的介绍,分享软件,语音识别,基于API搜索。文章末尾附源码,源码全注释。

项目主要功能及实现技术

功能1:等待界面

实现技术:利用线程的延时处理来达到进入APP时等待界面的效果,Thread.sleep(3000);代码延时三秒,三秒结束后通过intent来跳转界面。

功能2:不同类别垃圾的详情和示例

实现技术:在主界面中放置了四个imageButton,还是使用intent方式跳转到对应的详情页,每个类别的垃圾详情主要通过布局直接写入,示例展示则是通过绑定适配器的方式实现,提前搜索符合各个类别的示例垃圾,用数组的方式直接添加信息。另外一行只显示两个适配内容,所以布局是通过网格布局来实现的。利用数组循环添加的主要代码如下:

for(int i=0;imap=new HashMap<>(); map.put("text",WetGarbage[i]); data.add(map); }

功能3:基于API搜索垃圾,并显示所属类别

实现技术:这里封装使用了一个类,Okhttp的方式访问API,检索并返回数据,实现的过程中需要手动导入okhttp3的包,获取数据的方式使用的是GET方式。检索数据时需要带上搜索框输入的名称,匹配到结果后使用handler来接收数据。返回的是json数据,还需要对json数据进行解析。显示结果时还使用了progressDialog来实现搜索过程中的等待效果。

GET方式获取数据的代码如下:

public static void OkHttpGet(String url, Callback callback){ OkHttpClient client = new OkHttpClient(); Request request = new Request.Builder().url(url).build(); client.newCall(request).enqueue(callback); }

Json解析并显示代码如下:

JSONObject js = new JSONObject(json);//网络请求返回的是json数据,这里对json数据进行解析 String n = js.getString("data"); tvSearch.setText(name+": "+n);

功能4:基于谷歌的语音识别显示到搜索框

private void promptSpeechInput(){ Intent intent=new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH); intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,RecognizerIntent.LANGUAGE_MODEL_FREE_FORM); intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE, Locale.getDefault()); intent.putExtra(RecognizerIntent.EXTRA_PROMPT,getString(R.string.speech_prompt)); try{ startActivityForResult(intent,REQ_CODE_SPEECH_INPUT);} catch (ActivityNotFoundException a){ Toast.makeText(getApplicationContext(),getString(R.string.speech_not_supported),Toast.LENGTH_SHORT).show(); } } protected void onActivityResult(int requestCode,int resultCode,Intent data){ super.onActivityResult(requestCode,resultCode,data); switch (requestCode){ case REQ_CODE_SPEECH_INPUT:{ if(resultCode==RESULT_OK&&null!=data){ ArrayListresult=data.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS); editText.setText(result.get(0)); } break; } } }

功能5:“关于软件详情”页面的图片滑动效果

实现技术:图片左右滑动效果主要是通过绑定一个ViewPager适配器来展示的,可以手动左右滑动图片,也可以延时自动播放下一张图片。

手动滑动图片的核心代码如下:

private void setVPListener() { /* 设置ViewPager的监听器*/ aboutVp.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { } @Override public void onPageSelected(int position) { for (int i = 0; i < pointList.size(); i++) { pointList.get(i).setImageResource(R.mipmap.a2); } pointList.get(position%pointList.size()).setImageResource(R.mipmap.a3); } @Override public void onPageScrollStateChanged(int state) { } }); }

功能6:“关于软件详情”页面分享软件

实现技术:这里主要是调用系统自带的分享功能,通过QQ、微信等方式分享给好友一个message,实现代码如下所示:

public void onClick(View v) { // 调用系统自带的分享功能 Intent intent = new Intent(Intent.ACTION_SEND); intent.setType("text/plain"); String msg= "垃圾分类非常的重要,了解垃圾的分类规则,处理方式,想要了解更多么,快来下载垃圾分类app吧~~"; intent.putExtra(Intent.EXTRA_TEXT,msg); startActivity(Intent.createChooser(intent,"垃圾分类")); }

功能7:按键音效

实现技术:写了一个初始化音效和播放音效的函数,

private SoundPool soundPool;//声明一个SoundPool private int soundID;//创建某个声音对应的音频ID

先声明所需要的用到的id,方法的代码如下所示:

@SuppressLint("NewApi") private void initSound() {//音乐初始化方法 soundPool = new SoundPool.Builder().build(); soundID = soundPool.load(this, R.raw.click_music, 1);//加载对应的因为文件 } private void playSound() { soundPool.play( soundID, 0.1f, //左耳道音量【0~1】 0.5f, //右耳道音量【0~1】 0, //播放优先级【0表示最低优先级】 1, //循环模式【0表示循环一次,-1表示一直循环,其他表示数字+1表示当前数字对应的循环次数】 1 //播放速度【1是正常,范围从0~2】 ); }

最终效果图

a8b58c2642e078f7c2eded29b5c904d5.png

ea6258b9d67a3db4584ef11753718e31.png

a600daf32218734c2b1d5a656bf1b138.png

4832c549ec0d27b12df4b5de9cd4d9b9.png

附上源码链接:https://download.csdn.net/download/Tank_548/12682162

总结

这是作为小白做的第一个APP,做的不好希望大家指点一下。代码量不大,适用于小项目。

本文地址:https://blog.csdn.net/Tank_548/article/details/107759445

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android Studio 中实现语音识别,可以使用 Android 提供的 SpeechRecognizer 类。下面是一个简单的示例代码,演示如何通过语音输入获取文本: 1. 在你的 Android 项目中,打开 `build.gradle` 文件,并确保以下依赖项已添加到 `dependencies` 部分: ```groovy implementation 'com.android.support:support-v4:29.0.0' ``` 2. 创建一个新的 Activity 或在现有的 Activity 中添加以下代码: ```java import android.content.Intent; import android.speech.RecognizerIntent; import android.speech.SpeechRecognizer; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.TextView; import java.util.ArrayList; public class MainActivity extends AppCompatActivity { private Button startBtn; private TextView resultTextView; private SpeechRecognizer speechRecognizer; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); startBtn = findViewById(R.id.start_btn); resultTextView = findViewById(R.id.result_textview); speechRecognizer = SpeechRecognizer.createSpeechRecognizer(this); startBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { startSpeechRecognition(); } }); } private void startSpeechRecognition() { Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH); intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_FREE_FORM); intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE, "en-US"); // 设置识别语言为英语,可以根据需要调整 speechRecognizer.setRecognitionListener(new RecognitionListener() { @Override public void onReadyForSpeech(Bundle params) { // 准备开始说话 } @Override public void onBeginningOfSpeech() { // 开始说话 } @Override public void onRmsChanged(float rmsdB) { // 音量变化 } @Override public void onEndOfSpeech() { // 说话结束 } @Override public void onError(int error) { // 发生错误 } @Override public void onResults(Bundle results) { ArrayList<String> resultData = results.getStringArrayList(SpeechRecognizer.RESULTS_RECOGNITION); if (resultData != null && resultData.size() > 0) { String recognizedText = resultData.get(0); resultTextView.setText(recognizedText); } } @Override public void onPartialResults(Bundle partialResults) { // 部分识别结果 } @Override public void onEvent(int eventType, Bundle params) { // 其他事件 } }); speechRecognizer.startListening(intent); } } ``` 3. 在你的布局文件 `activity_main.xml` 中添加以下代码: ```xml <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <Button android:id="@+id/start_btn" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Start Recognition" /> <TextView android:id="@+id/result_textview" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@id/start_btn" android:layout_marginTop="16dp" /> </RelativeLayout> ``` 这样,当你点击 "Start Recognition" 按钮时,将会启动语音识别,并将识别出的文本显示在 TextView 中。 请注意,为了在 Android 设备上进行语音识别,你需要连接到互联网并且设备上安装了相应的语音识别引擎。此外,在 AndroidManifest.xml 文件中,你需要添加相应的权限: ```xml <uses-permission android:name="android.permission.RECORD_AUDIO" /> <uses-permission android:name="android.permission.INTERNET" /> ``` 希望这对你有帮助!如果你有其他问题,请随时问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值