百度语音助手怎么集成到自己的Fragment项目里面?(教你怎么避坑)

百度语音助手怎么集成到自己的Fragment项目里面?(教你怎么避坑),第1张

概述百度语音助手集成到Fragment里面怎么避坑?其实集成到Fragment才是比较实用的,但是没看到有相关详细的教程,所以本人尝试去挖这个坑看看能不能填上,终于终于还是搞出来了。首先你还是要进行一些导包修改版本等相关的 *** 作,不懂可以点下这个链接百度语音识别集成到HelloWorld,这个 百度语音助手集成到Fragment里面怎么避坑?

其实集成到Fragment才是比较实用的,但是没看到有相关详细的教程,所以本人尝试去挖这个坑看看能不能填上,终于终于还是搞出来了。
首先你还是要进行一些导包修改版本等相关的 *** 作,不懂可以点下这个链接百度语音识别集成到HelloWorld,这个步骤完成后,回到你要集成的Fragment里面,可以看下我的Fragment的布局:

<?xml version="1.0" enCoding="utf-8"?><FrameLayout 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"    tools:context=".VcFragment">    <relativeLayout        androID:layout_wIDth="match_parent"        androID:layout_height="match_parent"        tools:ignore="Uselessparent">        <ImageVIEw            androID:ID="@+ID/iv_vc"            androID:layout_wIDth="100dp"            androID:layout_height="100dp"            androID:layout_alignParentEnd="true"            androID:layout_alignParentBottom="true"            androID:layout_marginEnd="154dp"            androID:layout_marginBottom="160dp"            androID:contentDescription="@string/to"            androID:src="@drawable/ic_mkf" />        <TextVIEw            androID:ID="@+ID/tv_vcResult"            androID:layout_wIDth="match_parent"            androID:layout_height="wrap_content"            androID:layout_alignParenttop="true"            androID:layout_alignParentEnd="true"            androID:layout_centerVertical="true"            androID:layout_margintop="163dp"            androID:layout_marginEnd="0dp"            androID:text="@string/ress"            androID:textAlignment="center"            androID:textcolor="@color/colorPrimary"            androID:textSize="20sp"            androID:textStyle="bold" />    </relativeLayout></FrameLayout>

逻辑代码如下:

import androID.Manifest;import androID.annotation.Suppresslint;import androID.app.Activity;import androID.app.usage.UsageEvents;import androID.content.pm.PackageManager;import androID.os.Bundle;import androIDx.annotation.NonNull;import androIDx.annotation.Nullable;import androIDx.core.app.ActivityCompat;import androIDx.core.content.ContextCompat;import androIDx.fragment.app.Fragment;import androID.os.Handler;import androID.os.Message;import androID.util.Log;import androID.vIEw.LayoutInflater;import androID.vIEw.MotionEvent;import androID.vIEw.VIEw;import androID.vIEw.VIEwGroup;import androID.Widget.ImageVIEw;import androID.Widget.TextVIEw;import androID.Widget.Toast;import com.baIDu.aip.asrwakeup3.core.recog.MyRecognizer;import com.baIDu.aip.asrwakeup3.core.recog.@R_419_6818@ener.IRecog@R_419_6818@ener;import com.baIDu.aip.asrwakeup3.core.recog.@R_419_6818@ener.MessageStatusRecog@R_419_6818@ener;import com.baIDu.aip.asrwakeup3.core.recog.@R_419_6818@ener.StatusRecog@R_419_6818@ener;import com.baIDu.aip.asrwakeup3.core.util.fileUtil;import com.baIDu.speech.EventManager;import com.baIDu.speech.asr.SpeechConstant;import org.Json.JsONException;import org.Json.JsONObject;import java.util.Array@R_419_6818@;import java.util.linkedHashMap;import java.util.Map;import java.util.Objects;/** * A simple {@link Fragment} subclass. */public class VcFragment extends Fragment {    public VcFragment() {        // required empty public constructor    }    private TextVIEw tv_vcResult;    //    public EventManager asr;    protected MyRecognizer myRecognizer;    protected Handler handler;    protected String resultTxt = null;    @Suppresslint({"ClickableVIEwAccessibility", "HandlerLeak"})    @OverrIDe    public VIEw onCreateVIEw(@NonNull LayoutInflater inflater,@Nullable VIEwGroup container,                             @Nullable Bundle savedInstanceState) {        // Inflate the layout for this fragment        inflater = LayoutInflater.from(getContext());        VIEw myvIEw = inflater.inflate(R.layout.fragment_vc, container, false);        //建立一个线程来处理信息        handler = new Handler() {            @OverrIDe            public voID handleMessage(Message msg) {                super.handleMessage(msg);                handleMsg(msg);            }        };        tv_vcResult = myvIEw.findVIEwByID(R.ID.tv_vcResult);        ImageVIEw iv_vc = myvIEw.findVIEwByID(R.ID.iv_vc);        iv_vc.setontouch@R_419_6818@ener(new VIEw.Ontouch@R_419_6818@ener() {            @OverrIDe            public boolean ontouch(VIEw v, MotionEvent event) {                int action = event.getAction();                if (action == MotionEvent.ACTION_DOWN) {                    tv_vcResult.setText("识别中...");//                    Toast.makeText(getContext(), "正在识别....", Toast.LENGTH_SHORT).show();                    start();                } else if (action == MotionEvent.ACTION_UP) {                    stop();                }                return false;            }        });        initSpeechRecog();        initPermission();        return myvIEw;    }    //初始化语音识别    private voID initSpeechRecog() {        IRecog@R_419_6818@ener @R_419_6818@ener = new MessageStatusRecog@R_419_6818@ener(handler);        if (myRecognizer == null) {            myRecognizer = new MyRecognizer(this.getContext(), @R_419_6818@ener);        }    }    //开始识别    private voID start() {        final Map<String, Object> params = new linkedHashMap<String, Object>();        params.put(SpeechConstant.ACCEPT_AUdio_VolUME, false);        params.put(SpeechConstant.PID, 1536);//普通话        myRecognizer.start(params);    }    //停止识别    private voID stop() {        myRecognizer.stop();    }    //回调事件处理    private voID handleMsg(Message msg) {        if (msg.what == MessageStatusRecog@R_419_6818@ener.STATUS_FINISHED) {//            String resultTxt = null;            try {                JsONObject msgObj = new JsONObject(msg.obj.toString());                if (msg.arg2 == 1) {                    String error = msgObj.getString("error");                    System.out.println("error =>" + error);                    if ("0".equals(error)) {                        resultTxt = msgObj.getString("best_result");                        tv_vcResult.setText(resultTxt);                    }                }            } catch (JsONException e) {                e.printstacktrace();            }        }    }    //释放资源    @OverrIDe    public voID onDestroy() {        super.onDestroy();        if (myRecognizer != null) {            myRecognizer.release();//释放资源,不然程序会闪退            myRecognizer = null;        }    }    //调用权限    private voID initPermission() {        String[] permissions = {Manifest.permission.RECORD_AUdio,                Manifest.permission.ACCESS_NETWORK_STATE,                Manifest.permission.INTERNET,                Manifest.permission.READ_PHONE_STATE,                Manifest.permission.WRITE_EXTERNAL_STORAGE,                Manifest.permission.MODIFY_AUdio_SETTINGS,                Manifest.permission.ACCESS_WIFI_STATE,                Manifest.permission.CHANGE_WIFI_STATE        };        Array@R_419_6818@<String> toApply@R_419_6818@ = new Array@R_419_6818@<>();        for (String perm : permissions) {            if (PackageManager.PERMISSION_GRANTED != ContextCompat.checkSelfPermission(Objects.requireNonNull(getActivity()), perm)) {                toApply@R_419_6818@.add(perm);                //进入这里代表没有权限            }        }        String[] tmp@R_419_6818@ = new String[toApply@R_419_6818@.size()];        if (!toApply@R_419_6818@.isEmpty()) {            ActivityCompat.requestPermissions(getActivity(), toApply@R_419_6818@.toArray(tmp@R_419_6818@), 123);        }    }    @OverrIDe    public voID onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {        // 此处为androID 6.0以上动态授权的回调,用户自行实现。    }

然后你可以在自己的日志看到识别效果,但是你的TextVIEw一点反应都没,怎么办呢?


首先把AndroID改成Project,找到以下路径


修改两行代码就可以了,如下图所示:


效果可以看图

总结

以上是内存溢出为你收集整理的百度语音助手怎么集成到自己的Fragment项目里面?(教你怎么避坑)全部内容,希望文章能够帮你解决百度语音助手怎么集成到自己的Fragment项目里面?(教你怎么避坑)所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1061553.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-25
下一篇2022-05-25

发表评论

登录后才能评论

评论列表(0条)

    保存