
其实集成到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项目里面?(教你怎么避坑)所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)