1

私は収入 SMS をキャッチするための SMS レシーバーを作成しました。これはコードとマニフェストの内容です。私が覚えているように、同じアプリが正常に動作するように書かれandroid 2.3ていましたが、このコードは実行されandroid 4.xており、正しく機能していません。何が問題ですか ?のセキュリティの問題に依存していますandroid 4.xか?

マニフェスト:

<receiver android:name="SmsReceiver">
        <intent-filter android:priority="100">
            <action android:name="android.provider.telephony.SMS_RECEIVED"/>
        </intent-filter>
    </receiver>

Java コード:

 public class SmsReceiver extends BroadcastReceiver {

private static final String SMS_RECEIVED = "android.provider.Telephony.SMS_RECEIVED";

@Override
public void onReceive(Context context, Intent intent) {
    String action = intent.getAction();
    Logger.i("INCOMMING SMS...");
    if (action == SMS_RECEIVED) {
        Bundle bundle = intent.getExtras();
        if (bundle != null) {
            Object[] pdus = (Object[]) bundle.get("pdus");
            final SmsMessage[] messages = new SmsMessage[pdus.length];
            for (int i = 0; i < pdus.length; i++) {
                messages[i] = SmsMessage.createFromPdu((byte[]) pdus[i]);
            }
            if (messages.length > -1) {
                String sendr = messages[0].getOriginatingAddress();
                Logger.i(sendr);
            }
        }
    }
}


}
4

2 に答える 2

2

私は同じ問題を抱えていたので、マニフェストに登録されたレシーバーにさらに2つのアクションを追加して修正したので、次のようになります。

<receiver android:name=".SmsReceiver">
    <intent-filter android:priority="100">
    <action android:name="android.intent.action.PHONE_STATE"/>
        <action android:name="android.provider.telephony.SMS_RECEIVED"/>
        <action android:name="com.your.package.android.action.broadcast"/>
    </intent-filter>
  </receiver>

許可も追加します:

 <uses-permission android:name="android.permission.RECEIVE_SMS" />

また、文字列の比較には equals 演算子を使用せず、代わりに equals メソッドを使用します (注: equalsIgnoreCase() の方が適切です)。

したがって、次のようになります。

if(SMS_RECEIVED.equalsIgnoreCase(action))
{
//continue
}

それが役に立てば幸い。

于 2013-08-02T09:25:15.167 に答える
0

私はあなたと同じ問題を抱えており、ネットで多くの調査を行った後、問題を見つけました。アプリケーションが開始されておらず、エミュレーター コントロールが--include-stopped-packagesオプションを adb コマンドで送信できるように送信していません。Android 3.x で導入された機能です。

したがって、アプリケーションが開始されていないため、レシーバーはブロードキャストを受信しません。最初に起動するには、システムからコンソールを開き、次のコマンドを入力します。

*adb -e shell am broadcast -a android.provider.Telephony.SMS_RECEIVED --include-stopped-packages*

BroadcastReceiver は空の SMS を受信します。

このコマンドの後、プロセスが [デバイス] ビューに表示され、エミュレータ コントロールから SMS を送信できます。

于 2013-10-27T22:24:52.947 に答える