2013-10-22 1 views
0

: 나는에 AlertDialog를 표시하고 진동기를 사용하고 싶었쇼에 AlertDialog 사용 진동기 나는이 같은 RecognitionListener를 구현하는 클래스에 봉착

public class listener implements RecognitionListener 

하지만 난 컨텍스트를 제공해야하기 때문에 이것이 불가능을 내가 갖고 있지 않은 것.

내에 AlertDialog 코드는 다음과 같았다 :

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

      } 
     }) 
     .show(); 

을하지만에 AlertDialog.Builder가 (이)는 컨텍스트, 내 진동 코드와 같은 문제가 원하는 :

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

getSystemService 방법 ISN을 ' 사용할 수 없습니다.

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); 

이 가장 좋은 방법이 뭐죠 해결하기 : 클래스를 시작

내 코드?

답변

1

컨텍스트 개체를 사용하는 생성자는 여기서 잘 작동합니다. 당신이 컨텍스트 대신 this의 mContext를 사용할 필요가있을 때

은 다음 상황에 맞는

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

를 사용하는 생성자를 선언

private Context mContext; 

변수 컨텍스트를 선언합니다.

당신은 리스너 클래스가 리스너가

+0

감사 청취자되지해야하므로 항상 대문자로 시작해야 제쳐두고 자바 클래스 이름에서와 같이 또한 현재 컨텍스트

sr.setRecognitionListener(new listener(this)); 

을 통과 만들 때. super()는 RecognitionListener 클래스를 구현하는 것과 관련이 있습니까? 내가 그 생성자라고 부르는거야? – user1007522

+0

컴파일러가 그것을 넣을 것이지만 호출되는 RecognitionListener 생성자를 지정하므로 super()가 필요하지 않습니다. 호출되고 있다는 알림으로서 명시 적으로 명시하고 싶습니다. –

+0

감사합니다. 매우 도움이되었습니다. – user1007522