目前,我的应用程序可用作计算机上客户端应用程序的蓝牙服务器。我按下应用程序上的一个按钮,它会将相应的键(F1-F12)发送到计算机并播放一首歌曲。
我现在想要完成的是向应用程序添加语音命令,以便按钮功能可以通过语音进行,也许通过热门词或按钮启动。例如,说“One”会按下按钮1或发送相同的命令,同样使用kill命令“stop”。
目前,app函数的主要驱动线程是OnTouch方法,它实现了一系列与按钮对应的case语句。
public boolean onTouch(View view, MotionEvent event) {
//*** Load animations
Animation spinin = AnimationUtils.loadAnimation(this, R.anim.custom_anim);
Animation linear = AnimationUtils.loadAnimation(this, R.anim.in_out);
if(connected) {
switch(event.getAction()) {
case MotionEvent.ACTION_DOWN:
switch(view.getId()) {
case R.id.Image_SlideShow:
ring();
mBluetoothService.write('1');
Image1.startAnimation(spinin);
processBackgroundSlide();
break;
case R.id.Image1:
mBluetoothService.write('1');
Image1.startAnimation(spinin);
ring();
processBackgroundSlide();
break;
case R.id.Image2:
mBluetoothService.write('2');
Image2.startAnimation(spinin);
ring();
Image_SlideShow.setImageResource(R.drawable.deep_blue_island_malvives_1920x896);
break;
case R.id.Image3:
mBluetoothService.write('3');
Image3.startAnimation(spinin);
ring();
break;
case R.id.Image4:
mBluetoothService.write('4');
Image4.startAnimation(spinin);
ring();
break;
case R.id.Image5:
mBluetoothService.write('5');
Image5.startAnimation(spinin);
ring();
break;
case R.id.Image6:
mBluetoothService.write('6');
Image6.startAnimation(spinin);
ring();
break;
case R.id.Image7:
mBluetoothService.write('7');
Image7.startAnimation(spinin);
ring();
break;
case R.id.Image8:
mBluetoothService.write('8');
Image8.startAnimation(spinin);
ring();
break;
case R.id.Image9:
mBluetoothService.write('9');
Image9.startAnimation(spinin);
ring();
break;
case R.id.Image10:
mBluetoothService.write('A');
Image10.startAnimation(spinin);
ring();
break;
case R.id.Image11:
mBluetoothService.write('B');
Image11.startAnimation(spinin);
ring();
break;
case R.id.Image12:
mBluetoothService.write('C');
Image12.startAnimation(spinin);
ring();
break;
} // end switch(view.getId())
break;
} // end switch(event.getAction())
} // end if(connected)
return true;
} // end onTouch(View view, MotionEvent event)
正如您所看到的,每个按钮对应一个数字然后通过蓝牙服务发送,我一直认为通过语音添加类似命令应该是一个简单的实现。
我尝试使用语音到文本来引用一些演示和线程,但我只会导致崩溃。我也引用了this thread involving switch statements,但是当按下任何按钮一次时,会出现多个语音窗口提示。
任何指示或建议都会有所帮助,谢谢你。
我也会将OnActivityResult留在这里以防它可能有所帮助。
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
switch(requestCode) {
case REQUEST_CONNECT_DEVICE:
if(resultCode == Activity.RESULT_OK) {
// Get Device MAC Address
String address = data.getExtras().getString(DeviceListActivity.EXTRA_DEVICE_ADDRESS);
// Get BluetoothDevice Object
BluetoothDevice device = mBluetoothAdapter.getRemoteDevice(address);
// Attempt to Connect to Device
mBluetoothService.connect(device);
connected = true;
}
break;
case REQUEST_ENABLE_BT:
if(resultCode != Activity.RESULT_OK) {
Log.d(TAG, "BT not enabled");
Toast.makeText(this, R.string.bt_not_enabled_leaving, Toast.LENGTH_SHORT).show();
finish();
}
break;
} // end switch(requestCode)
} // end protected void onActivityResult
具体而言,我更倾向于如何将语音识别和命令完全实现为一项活动。我看到很多关于将它作为服务使用的例子,但对于Android编程是新手,我没有任何方向。