112 lines
3.5 KiB
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();
|
|
}
|
|
});
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|