0

我有一个像这样实现 RecognitionListener 的类:

public class listener implements RecognitionListener

我想显示一个警报对话框并使用振动器,但这是不可能的,因为我需要提供一个我没有的上下文。

我的警报对话框代码是这样的:

    new AlertDialog.Builder(this)
        .setTitle("dd")
        .setMessage("aa")
        .setNeutralButton("Ok", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int which) { 

            }
         })
         .show();

但是 AlertDialog.Builder(this) 需要一个上下文,我的振动器代码也有同样的问题:

v = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);

getSystemService 方法不可用。

我开始上课的代码:

sr = SpeechRecognizer.createSpeechRecognizer(this);
sr.setRecognitionListener(new listener());

Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);        
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
intent.putExtra(RecognizerIntent.EXTRA_CALLING_PACKAGE,"voice.recognition.test");

intent.putExtra(RecognizerIntent.EXTRA_MAX_RESULTS,5); 
sr.startListening(intent);

解决这个问题的最佳方法是什么?

4

1 回答 1

1

采用上下文对象的构造函数在这里可以很好地工作。

声明一个上下文变量

private Context mContext;

然后声明一个接受上下文的构造函数

public listener(Context context){
    super();
    mContext = context
}

当您需要上下文时,请使用 mContext 而不是this.

当您创建侦听器时,传递当前上下文

sr.setRecognitionListener(new listener(this));

此外,Java 类名中的旁白应始终以大写字母开头,因此您的类应该是 Listener 而不是 listener

于 2013-10-22T09:51:08.370 回答