4

アプリをインストールすると、すべて正常に動作します。モバイル画面をロックするまで、メッセージを送信するたびにメッセージ本文を印刷できます。その後、アプリは着信メッセージの印刷を停止します。私はこの問題を克服するために多くの方法を試しましたが、運がありませんでした。私を助けてください...

public class SmsReceiveActivity extends Activity{

@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_sms);

receiver = new BroadcastReceiver() {

@Override
public void onReceive(Context context, Intent intent) {

if (intent.getAction().equals(SMS_RECEIVED)) {
Object[] pdus = (Object[]) bundle.get("pdus");
final android.telephony.SmsMessage[] messages = new android.telephony.SmsMessage[pdus.length];

for (int i = 0; i < pdus.length; i++) {
    messages[i] = android.telephony.SmsMessage.createFromPdu((byte[]) pdus[i]);
    incomingMsgString += messages[i].getMessageBody().toString();
   }
    // Print Incoming message Body
  }
 }
}        
  getApplication().registerReceiver(receiver, new IntentFilter(SMS_RECEIVED));
 }
}
4

2 に答える 2

4

BroadcastReceiver ドキュメントによると、レシーバーをregisterReceiver()「一時停止するとインテントを受信しません」に登録すると、アクティビティに依存しないレシーバーが必要な場合は、名前付きクラスとして実装し、マニフェストに公開する必要があります。たとえば、匿名BroadcastReceiverで名前付きクラスを作成します。

public class MyReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {

if (intent.getAction().equals(SMS_RECEIVED)) {
Object[] pdus = (Object[]) bundle.get("pdus");
final android.telephony.SmsMessage[] messages = new android.telephony.SmsMessage[pdus.length];

for (int i = 0; i < pdus.length; i++) {
    messages[i] = android.telephony.SmsMessage.createFromPdu((byte[]) pdus[i]);
    incomingMsgString += messages[i].getMessageBody().toString();
   }
    // Print Incoming message Body
  }
 }
} 

マニフェストで、applicationタグ内にレシーバーを追加します

    <receiver android:name=".MyReceiver" >
    <intent-filter>
    <action android:name="android.provider.Telephony.SMS_RECEIVED"/ >
    </intent-filter>
    </receiver>

次に、SMSメッセージが受信されると、onReceiveメソッドが呼び出されます。そこで、必要な情報をパッケージ化して、ActivityまたはServiceさらに処理するためのインテントを起動できます。

于 2013-01-22T04:28:04.187 に答える
0

ブロードキャストを静的内部クラスとして作成し、マニフェストに登録します。このリンクを試してください。Androidの内部クラスとしてのレシーバー

于 2013-01-22T04:50:46.103 に答える