마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

코드 질문입니다. 답변부탁드립니다.

0 추천
public class MainActivity extends Activity {
    Context mContext;
    EditText smsNumber, smsTextContext;
    Intent i;
    SpeechRecognizer mRecognizer;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        mContext = this;
        
        smsNumber = (EditText) findViewById(R.id.smsNumber);
        smsTextContext = (EditText) findViewById(R.id.smsText);
 
        smsTextContext.setOnClickListener(new OnClickListener(){

   @Override
   public void onClick(View v) {
    // TODO Auto-generated method stub
    //if(v.isClickable()){
     
     i = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);//음성인식 intent생성
        i.putExtra(RecognizerIntent.EXTRA_CALLING_PACKAGE, getPackageName());//데이터설정
        i.putExtra(RecognizerIntent.EXTRA_LANGUAGE, "ko-KR");//음성인식 언어 설정
        i.putExtra(RecognizerIntent.EXTRA_PROMPT, "말을 하세요."); //사용자에게 보여줄 문자    

     
    //}
   }           
        });
        
        mRecognizer = SpeechRecognizer.createSpeechRecognizer(this);
     //오류가 나서 생성함
        RecognitionListener listener = null;
  mRecognizer.setRecognitionListener(listener);
     mRecognizer.startListening(i);    
    }
    
    
    private RecognitionListener listener = new RecognitionListener() {
      
        @Override
        public void onReadyForSpeech(Bundle params) {
        }
        @Override
        public void onBeginningOfSpeech() {
        }
  
        @Override
        public void onRmsChanged(float rmsdB) {
        }
  
        @Override
        public void onBufferReceived(byte[] buffer) {
        }
  
        @Override
        public void onEndOfSpeech() {
        }
  
        @Override
        public void onError(int error) {
        }
  
        @Override
        public void onResults(Bundle results) {
            ///
            String key= "";
            key = SpeechRecognizer.RESULTS_RECOGNITION;
            ArrayList<String> mResult = results.getStringArrayList(key);
            String[] rs = new String[mResult.size()];
            mResult.toArray(rs);
            smsTextContext.setText("" + rs[0]);
            mRecognizer.startListening(i);
            ///
        }
  
        @Override
        public void onPartialResults(Bundle partialResults) {
        }
  
        @Override
        public void onEvent(int eventType, Bundle params) {
        }
    };

    
    public void sendSMS(View v){
        String smsNum = smsNumber.getText().toString();
        String smsText = smsTextContext.getText().toString();
        
        if (smsNum.length()>0 && smsText.length()>0){
            sendSMS(smsNum, smsText);
        }
       ..............
    }
----------------------------------------------------------
09-01 14:36:53.486: D/ResourcesManager(25200): creating new AssetManager and set to /data/app/whdghks913.tistory.examplesendsms-1/base.apk
09-01 14:36:53.576: D/AndroidRuntime(25200): Shutting down VM
09-01 14:36:53.581: E/AndroidRuntime(25200): FATAL EXCEPTION: main
09-01 14:36:53.581: E/AndroidRuntime(25200): Process: whdghks913.tistory.examplesendsms, PID: 25200
09-01 14:36:53.581: E/AndroidRuntime(25200): java.lang.RuntimeException: Unable to start activity ComponentInfo{whdghks913.tistory.examplesendsms/whdghks913.tistory.examplesendsms.MainActivity}: java.lang.IllegalArgumentException: intent must not be null
09-01 14:36:53.581: E/AndroidRuntime(25200):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2712)
09-01 14:36:53.581: E/AndroidRuntime(25200):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2777)
09-01 14:36:53.581: E/AndroidRuntime(25200):  at android.app.ActivityThread.access$900(ActivityThread.java:179)
09-01 14:36:53.581: E/AndroidRuntime(25200):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1462)
09-01 14:36:53.581: E/AndroidRuntime(25200):  at android.os.Handler.dispatchMessage(Handler.java:102)
09-01 14:36:53.581: E/AndroidRuntime(25200):  at android.os.Looper.loop(Looper.java:145)
09-01 14:36:53.581: E/AndroidRuntime(25200):  at android.app.ActivityThread.main(ActivityThread.java:5972)
09-01 14:36:53.581: E/AndroidRuntime(25200):  at java.lang.reflect.Method.invoke(Native Method)
09-01 14:36:53.581: E/AndroidRuntime(25200):  at java.lang.reflect.Method.invoke(Method.java:372)
09-01 14:36:53.581: E/AndroidRuntime(25200):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1399)
..........

제가 문자보내기 앱에서 문자 edit창을 음성으로 입력받는 것을 해보고 싶습니다.

제가 코드를 돌려보면 디버깅에서 error는 안나는것 같은데...

하나 editext창은 전화번호를 키보드로 입력받고 두번째 edittext창은 문자입력란으로 칸을 눌렀을때 문자내용을 음성으로 인식받도록 해보고 싶습니다.

그런데... 이걸 돌려보면 앱 핸드폰 실행했을때 앱이 중지됩니다.

어떤 문제가 있는건지, 소스코드 봐주시고 알려주세요...

부탁드립니다.

 

 

 

익명사용자 님이 2015년 9월 1일 질문

1개의 답변

0 추천
java.lang.IllegalArgumentException: intent must not be null

 

intent가 null 이라는데요..

 

public void onClick(View v) 호출 시 new 하시는데,

public void onClick(View v) 호출은 클릭할 때 불리다보니,

 mRecognizer.startListening(i);   가 먼저 불려,  Exception이 발생한듯 합니다.

 

 mRecognizer.startListening(i);   호출 을 onClick호출되어,  intent를 new 한 이후에 하도록 해 보세요.
익명사용자 님이 2015년 9월 2일 답변
...