最近的音频播放项目要求应用内支持语音控制
用的是讯飞的,大概整理一下作为笔记:
首先在lib目录下引入:XiriScene.jar和XiriFeedback.jar
然后在bulid.gradle文件中加入:
implementation files('libs\\XiriScene.jar') implementation files('libs\\XiriFeedback.jar')
接下来是代码:
1.XiriISceneListener.java
package com.mychtech.himalayajs.service;
import android.content.Intent;
public interface XiriISceneListener {
String onQuery();
void onExecute(Intent var1);
}
2.XiriManager.java
package com.mychtech.himalayajs.service;
import android.content.Context;
import android.content.Intent;
import android.util.Log;
import com.iflytek.xiri.Feedback;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
public class XiriManager implements XiriISceneListener {
private static XiriManager mInstance = null;
private XiriScene mScene;
private Feedback mFeedback;
private String mSceneJson;
private Context mContext = null;
private IXiriManager mIXiriManager = null;
public static XiriManager getInstance() {
synchronized (XiriManager.class) {
if (mInstance == null) {
mInstance = new XiriManager();
}
}
return mInstance;
}
public void onCreate(Context context, IXiriManager iXiriManager) {
mIXiriManager = iXiriManager;
mContext = context;
mScene = new XiriScene(context);
mFeedback = new Feedback(context);
mScene.init(this);
Log.i("XiriManager", "XiriManager add XiriManager oncreate....");
}
public void onResume() {
//初始化Scene,在界面显示的时候才可调用
mScene.init(this);
Log.i("XiriManager", "XiriManager add XiriManager onResume....");
}
public void onPause() {
//释放Scene,在界面消失的时候调用
mScene.release();
Log.i("XiriManager", "XiriManager add XiriManager onPause....");
}
@Override
public String onQuery() {
return regiestScene();
}
@Override
public void onExecute(Intent intent) {
mFeedback.begin(intent);
//判断是否有注册的场景
Log.i("XiriManager", "XiriManager add _scene = " + intent.hasExtra("_scene"));
if (intent.hasExtra("_scene") && intent.getStringExtra("_scene")
.equals("com.mychtech.himalayajs.activity.AudioDetailActivity")) {
if (intent.hasExtra("_command")) { //需注意,此处是_command,不是场景注册时候的_commands,千万别搞错了!
String commands = intent.getStringExtra("_command");
Log.i("XiriManager", "XiriManager add commands:" + commands);
JSONObject params = new JSONObject();
if ("key1".equals(commands)) {
//key1--> 固定命令(打开,退出)
mFeedback.feedback("打开", Feedback.SILENCE);
if(mIXiriManager != null) {
mIXiriManager.setXiriToJs("打开", "", params.toString());
}
} else if ("key2".equals(commands)) {
//key2--> 预定于语义$P(_PLAY)
String action = intent.getStringExtra("_action");
Log.i("XiriManager", "onExecute___key2__action: "+action);
if("SEEK".equals(action)) {
int position = intent.getIntExtra("position", -1);
try {
params.put("position", position);
} catch (JSONException e) {
e.printStackTrace();
}
} else if("FORWARD".equals(action) || "BACKWARD".equals(action)) {
int position = intent.getIntExtra("offset", -1);
try {
params.put("offset", position);
} catch (JSONException e) {
e.printStackTrace();
}
}
mFeedback.feedback(action, Feedback.SILENCE);
if(mIXir