1

SMSを介してポーリングするためのアプリを作成しています。私が欲しいのは、誰かが「はい」と言った場合、私は私のはいカウントで+1を取得し、「いいえ」の場合も同様です。これをバックグラウンドで実行したいので、サービスを使用しています。そして、私のに最終結果を表示しますMainActivity。私は試して、次のコードを作成しました:: BroadcastReciver

/*Bundle bundle = intent.getExtras();
        SmsMessage[]  msg = null;
        String body = "";
        if (bundle != null) {
            Object[] pdus = (Object[]) bundle.get("pdus");
            msg = new SmsMessage[pdus.length];
            for (int i = 0; i < msg.length; i++) {
                body = msg[i].getMessageBody().toString();              
            }
        }*/

        String body = "yes";
        if(body.equals("YES") || body.equals("yes")|| body.equals("y") || body.equals("Y")){
            Intent yes = new Intent(context,PollCounter.class);
            yes.putExtra("yes", true);
            yes.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            context.startService(yes);
            context.stopService(yes);
        }
        else if(body.equals("NO") || body.equals("no")|| body.equals("n") || body.equals("N")){
            Intent no = new Intent(context,PollCounter.class);
            no.putExtra("no", true);
            no.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            context.startService(no);
            context.stopService(no);
        }
        else {
            Intent invalidMsg = new Intent(context,PollCounter.class);
            invalidMsg.putExtra("invalidMsg", true);
            context.startService(invalidMsg);
        }
    }

}

BroadcastReceiverにも問題があります。コメントを外すと、「E / AndroidRuntime(708):java.lang.RuntimeException:レシーバーcom.atiffarrukh.smspolling.SMSBroadcastReciever:java.lang.NullPointerExceptionを開始できません」エラーが発生します。続く

/*Bundle bundle = intent.getExtras();
            SmsMessage[]  msg = null;
            String body = "";
            if (bundle != null) {
                Object[] pdus = (Object[]) bundle.get("pdus");
                msg = new SmsMessage[pdus.length];
                for (int i = 0; i < msg.length; i++) {
                    body = msg[i].getMessageBody().toString();              
                }
            }*/

理由はわかりません。以前にこのコードを使用しましたが、機能していました。

Service::で

boolean yes = intent.getBooleanExtra("yes", false);
        boolean no = intent.getBooleanExtra("no", false);
        boolean invalidMsg = intent.getBooleanExtra("invalidMsg", false);

        if (yes) {
            yesCount++;
            Intent intentYes = new Intent(this,MainActivity.class);
            intentYes.putExtra("yesCount", yesCount);
            startActivity(intentYes);
            Toast.makeText(getBaseContext(), "yes is recvd", Toast.LENGTH_LONG).show();
        } else if (no) {
            noCount++;
            Intent intentNo = new Intent(this,MainActivity.class);
            intentNo.putExtra("yesCount", noCount);
            startActivity(intentNo);
            Toast.makeText(getBaseContext(), "no is recvd", Toast.LENGTH_LONG).show();
        } else {
            invalidMsgCount++;
            Intent intentInavalidMsg = new Intent(this,MainActivity.class);
            intentInavalidMsg.putExtra("yesCount", invalidMsgCount);
            Toast.makeText(getBaseContext(), "Invalid is recvd", Toast.LENGTH_LONG).show();
        }

    }

使用しようとしましたが、使用Bundle b = intent.getExtras();方法がわかりません。何で初期化すればよいですかintent

ありがとう...

PS:私はAndroidを初めて使用します。私の質問が少し奇妙であるか、私のコーディングが奇妙に思われる場合は申し訳ありません。

4

1 に答える 1

0

忘れたようです

msg[i] = SmsMessage.createFromPdu((byte[])pduArray [i]);

あなたのサイクルで。

そのはず

for (int i = 0; i < msg.length; i++) {
         msg[i] = SmsMessage.createFromPdu((byte[])pduArray [i]);
         body = msg[i].getMessageBody().toString();              
}

それ以外の場合getMessageBody()は実際に戻りますnull

于 2012-04-23T14:23:13.363 に答える