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

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

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

项目主要功能及实现技术

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

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

for(int i=0;i<WetGarbage.length;i++){
    Map<String,Object>map=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){
            ArrayList<String>result=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】
    );
}

最终效果图

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
附上源码链接:https://download.csdn.net/download/Tank_548/12682162

总结

这是作为小白做的第一个APP,做的不好希望大家指点一下。代码量不大,适用于大二大三学生一到两个人的期末小项目。

猜你喜欢

转载自blog.csdn.net/Tank_548/article/details/107759445