1

私のアプリは、着信テキストメッセージを読んでそれを声に出して言うために、ブロードキャストレシーバーを呼び出しています。私のBroadcastReceiverは適切に呼び出され、テキストメッセージを適切に読み取りますが、speak()メソッドに関してはクラッシュするだけです。これが私のコードです:

これはBroadcastReceiverです:

public class DrivingModeSpeaker extends BroadcastReceiver  {

            @Override
    public void onReceive(Context context, Intent intent) 
    {
        // TODO Auto-generated method stub
        int n;
        Bundle bundle=intent.getExtras();
        Object messages[]=(Object[])bundle.get("pdus");
        SmsMessage smsMessage[]=new SmsMessage[messages.length];
        for(n=0;n<messages.length;n++)
        {
            smsMessage[n]=SmsMessage.createFromPdu((byte[])messages[n]);

        }
        //show first message
        String sms1=smsMessage[0].getMessageBody();
        String from=smsMessage[0].getOriginatingAddress();
        Toast toast=Toast.makeText(context,"In DrivingModeSpeaker BR",1);
        toast.show();
        DrivingMode.speakSMS(sms1);

    }


}

そして、これはメソッドを含むDrivingMode.javaですspeak()

public class DrivingMode extends Activity {
    private static TextToSpeech myTts;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //setContentView(R.layout.message_m);
        myTts = new TextToSpeech(this,ttsInitListener);


    }

private TextToSpeech.OnInitListener ttsInitListener=new TextToSpeech.OnInitListener() {

        @Override
        public void onInit(int version) {
            // myTts.speak(""+o, 0 ,null);

        }
    };
    public static void speakSMS(String sms)
    {
        myTts.speak(sms,0,null);

    }


}

別のプロジェクトでこのコードを試しましたが、機能します。しかし、私のメインプロジェクトでは、そうではありません。2つの放送受信機が衝突したためか、何かが原因でしょうか。わからない、Androidは初めてです、助けてください!

4

1 に答える 1

3

現在、Activity のインスタンスを作成して、Activity が実行されていない場合に Activity メソッドを呼び出そうとしてNullPointerExceptionいます。そのため、Activity のメソッドを呼び出す代わりに、Activity を開始し、asBroadcastReceiverを使用して SMS データを送信します。Intent.putExtra

例えば ​​:

public void onReceive(Context context, Intent intent) 
    {
       // Your code here....
        Toast toast=Toast.makeText(context,"In DrivingModeSpeaker BR",1);
        toast.show();
        // start Activity here
        Intent intent  = new Intent(context,
                    DrivingMode.class);
            intent.putExtra("sms", sms);  //<<< put sms text
            context.startActivity(intent);   

    }

DrivingModeonCreate メソッドでSMS データを取得し、次のようにspeakSMSメソッドを呼び出します。

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //setContentView(R.layout.message_m);
        Bundle extras = getIntent().getExtras();
        myTts = new TextToSpeech(this,ttsInitListener);
        DrivingMode.speakSMS(extras.getString("sms"));

    }

また、Speak の最後にアクティビティを終了するためにTextToSpeech.setOnUtteranceCompletedListenerを使用します。

于 2013-03-19T11:05:55.910 に答える