cordova-plugin-chinese-tts/src/android/ChineseTTS.java

112 lines
3.5 KiB
Java

package com.smartmapx.tts;
import org.apache.cordova.CordovaPlugin;
import org.apache.cordova.CallbackContext;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import android.content.Context;
import android.Manifest;
import android.widget.Toast;
import com.hjq.permissions.OnPermission;
import com.hjq.permissions.Permission;
import com.hjq.permissions.XXPermissions;
import java.util.List;
/**
* This class echoes a string called from JavaScript.
*/
public class ChineseTTS extends CordovaPlugin {
private Context context;
@Override
public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException {
if (action.equals("init")) {
this.init();
return true;
}
if (action.equals("speak")) {
String message = args.getString(0);
this.speak(message, callbackContext);
return true;
}
return false;
}
/**
* 初始化引擎
*
* @param
*/
private void init() {
context = this.cordova.getActivity();
permissionRequest();
}
/**
* 讲话
*
* @param message
* @param callbackContext
*/
private void speak(String message, CallbackContext callbackContext) {
if (message != null && message.length() > 0) {
SpeechUtilOffline.getInstance(context).play(message, SpeechUtilOffline.PLAY_MODE.QUEUED);
} else {
callbackContext.error("信息为空.");
}
}
/**
* 运行时权限--
*/
public void permissionRequest() {
// Manifest.permission.WRITE_EXTERNAL_STORAGE,
// Manifest.permission.ACCESS_FINE_LOCATION,
// Manifest.permission.READ_PHONE_STATE,
// Manifest.permission.RECEIVE_BOOT_COMPLETED
if (XXPermissions.isHasPermission(context, Permission.WRITE_EXTERNAL_STORAGE) && XXPermissions.isHasPermission(context, Permission.ACCESS_FINE_LOCATION) && XXPermissions.isHasPermission(context, Permission.READ_PHONE_STATE)) {
} else {
XXPermissions.with(this.cordova.getActivity())
// 可设置被拒绝后继续申请,直到用户授权或者永久拒绝
.constantRequest()
// 支持请求6.0悬浮窗权限8.0请求安装权限
.permission(Permission.WRITE_EXTERNAL_STORAGE, Permission.ACCESS_FINE_LOCATION, Permission.READ_PHONE_STATE)
// 不指定权限则自动获取清单中的危险权限
// .permission(Permission.Group.STORAGE, Permission.Group.CALENDAR)
.request(new OnPermission() {
@Override
public void hasPermission(List<String> granted, boolean isAll) {
if (isAll) {
Toast.makeText(context, "权限获取成功,正在初始化语音包", Toast.LENGTH_SHORT).show();
SpeechUtilOffline.getInstance(context).play("语音包初始化完成", SpeechUtilOffline.PLAY_MODE.QUEUED);
}
}
@Override
public void noPermission(List<String> denied, boolean quick) {
Toast.makeText(context, "权限获取失败,语音包初始化失败", Toast.LENGTH_SHORT).show();
}
});
}
}
}