特定の音声からテキストへの変換が検出されたときに Bluetooth 信号を arduino に送信できるコードを作成しようとしています。Bluetooth が無効になっている場合、Speech to Text はカスタム トーストを表示できます。残念ながら、Bluetooth が有効になっている場合、Speech to Text はカスタム トーストを表示できません (特定のテキストを検出できません)。コードに論理エラーがある可能性があります。みんな助けてください。ありがとうございました。
public void speechRecognition(View view) {
Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, "en-US");
try {
startActivityForResult(intent, RESULT_SPEECH);
} catch (ActivityNotFoundException a) {
getCustomToast("Oops! Your Device Doesn't Support Speech to Text!");
}
}
public void turnBluetoothOn(View view) {
if(!myBluetoothAdapter.isEnabled()) {
Intent turnOnIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
startActivityForResult(turnOnIntent, REQUEST_ENABLE_BT);
getCustomToast("Bluetooth Has Been Turned On");
}
else {
getCustomToast("Bluetooth Is Already On");
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
switch(requestCode) {
case REQUEST_ENABLE_BT: {
if(myBluetoothAdapter.isEnabled()) {
displayIndicator.setText("Status: Bluetooth Enabled");
}
else {
displayIndicator.setText("Status: Bluetooth Disabled");
}
break;
}
default: {
if (resultCode == RESULT_OK && null != data) {
ArrayList<String> text = data
.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS);
displayIndicator.setText(text.get(0));
if("grab".equals(displayIndicator.getText().toString())) {
getCustomToast("Grabbing Object");
mConnectedThread.write("G");
}
else if("release".equals(displayIndicator.getText().toString())) {
getCustomToast("Releasing Object");
mConnectedThread.write("Z");
}
else {
getCustomToast("Speech Error: Please RETRY!");
}
}
}
}
}
@Override
public void onResume() {
super.onResume();
Log.d(TAG, "...onResume - try connect...");
// Set up a pointer to the remote node using it's address.
BluetoothDevice device = myBluetoothAdapter.getRemoteDevice(robotBluetoothAddress);
// Two things are needed to make a connection:
// A MAC address, which we got above.
// A Service ID or UUID. In this case we are using the
// UUID for SPP.
try {
myBluetoothSocket = createBluetoothSocket(device);
} catch (IOException e) {
errorExit("Fatal Error", "In onResume() and socket create failed: " + e.getMessage() + ".");
}
// Discovery is resource intensive. Make sure it isn't going on
// when you attempt to connect and pass your message.
myBluetoothAdapter.cancelDiscovery();
// Establish the connection. This will block until it connects.
Log.d(TAG, "...Connecting...");
try {
myBluetoothSocket.connect();
Log.d(TAG, "....Connection ok...");
} catch (IOException e) {
try {
myBluetoothSocket.close();
} catch (IOException e2) {
errorExit("Fatal Error", "In onResume() and unable to close socket during connection failure" + e2.getMessage() + ".");
}
}
// Create a data stream so we can talk to server.
Log.d(TAG, "...Create Socket...");
mConnectedThread = new ConnectedThread( myBluetoothSocket);
mConnectedThread.start();
}
@Override
public void onPause() {
super.onPause();
Log.d(TAG, "...In onPause()...");
/*
try {
myBluetoothSocket.close();
} catch (IOException e2) {
errorExit("Fatal Error", "In onPause() and failed to close socket." + e2.getMessage() + ".");
}
*/
}
@Override
protected void onDestroy() {
if(D) Log.e(TAG, "+++ ON DESTROY +++");
super.onDestroy();
//unregisterReceiver(bReceiver);
}
public void getCustomToast(String message)
{
LayoutInflater inflater = getLayoutInflater();
View layout = inflater.inflate(R.layout.activity_custom_toast, (ViewGroup) findViewById(R.id.toast_layout));
TextView text = (TextView) layout.findViewById(R.id.toast_text_1);
text.setText(message);
Toast customToast = new Toast(this);
customToast.setDuration(Toast.LENGTH_SHORT);
customToast.setView(layout);
customToast.show();
}