1

電話のSMSアプリから送信されたSMSの配信レポートをキャプチャすることを想定したアプリに取り組んでいます。

配信レポートを送信および収集するメッセージングアプリに取り組んできました。これは、保留中のインテントを設定することによって行われます。

PendingIntent deliveredPI = PendingIntent.getBroadcast(this, id, intent_delivery, 0);

その後

registerReceiver(new BroadcastReceiver() {
            @Override
            public void onReceive(Context arg0, Intent arg1) {
                Bundle extras = new Bundle();
                extras = arg1.getExtras();
                switch (getResultCode()) {
                case Activity.RESULT_OK:
                    notifyMessage("SMS delivered", getBaseContext(), extras.getInt("id"));

                    break;
                case Activity.RESULT_CANCELED:
                    notifyMessage("SMS not delivered", getBaseContext(), extras.getInt("id"));

                    break;
                default :
                    notifyMessage("Unable to generate delivery Report", getBaseContext(), extras.getInt("id"));
                }
            }
        }, new IntentFilter(DELIVERED));

しかし今、私は電話にインストールされたSMSアプリによって送信されたSMSを収集できるようにする方法を知りたいです。

現在、私はこの目的のために放送リスターを設定することを考えていますが、どのように、どのような種類のブロードキャストリスターを設定し、whtパラメーターをチェックするかがわかりません。PDUで情報を確認する必要があると思いますが、よくわかりません。ネットを検索しようとしましたが、必要なものが見つかりませんでした。

助けてくれてありがとう。

4

1 に答える 1

1

アクティビティクラスで、次のグローバル変数を宣言します。

private BroadcastReceiver sendBroadcastReceiver;
private BroadcastReceiver deliveryBroadcastReceiver;
String SENT = "SMS_SENT";
String DELIVERED = "SMS_DELIVERED";

アクティビティのonCreateをオーバーライドし、レシーバーを登録します。

@Override
protected void onCreate(Bundle savedInstanceState)
{
  super.onCreate(savedInstanceState);
  sendBroadcastReceiver = new BroadcastReceiver()
  {

    public void onReceive(Context arg0, Intent arg1)
    {
        switch (getResultCode())
        {
        case Activity.RESULT_OK:
            Toast.makeText(getBaseContext(), "SMS Sent", Toast.LENGTH_SHORT).show();
            break;
        case SmsManager.RESULT_ERROR_GENERIC_FAILURE:
            Toast.makeText(getBaseContext(), "Generic failure", Toast.LENGTH_SHORT).show();
            break;
        case SmsManager.RESULT_ERROR_NO_SERVICE:
            Toast.makeText(getBaseContext(), "No service", Toast.LENGTH_SHORT).show();
            break;
        case SmsManager.RESULT_ERROR_NULL_PDU:
            Toast.makeText(getBaseContext(), "Null PDU", Toast.LENGTH_SHORT).show();
            break;
        case SmsManager.RESULT_ERROR_RADIO_OFF:
            Toast.makeText(getBaseContext(), "Radio off", Toast.LENGTH_SHORT).show();
            break;
        }
    }
};

deliveryBroadcastReceiver = new BroadcastReceiver()
{
    public void onReceive(Context arg0, Intent arg1)
    {
        switch (getResultCode())
        {
        case Activity.RESULT_OK:
            Toast.makeText(getBaseContext(), "SMS Delivered", Toast.LENGTH_SHORT).show();
            break;
        case Activity.RESULT_CANCELED:
            Toast.makeText(getBaseContext(), "SMS not delivered", Toast.LENGTH_SHORT).show();
            break;
        }
    }
};
registerReceiver(deliveryBroadcastReceiver, new IntentFilter(DELIVERED));
registerReceiver(sendBroadcastReceiver , new IntentFilter(SENT));
}

次に、sendsmsメソッドには6行のコードしか残されていません。

public void sendSMS(String phoneNumber, String message)
{
   String SENT = "SMS_SENT";
   String DELIVERED = "SMS_DELIVERED";
   PendingIntent sentPI = PendingIntent.getBroadcast(this, 0, new Intent(SENT), 0);
   PendingIntent deliveredPI = PendingIntent.getBroadcast(this, 0, new Intent(DELIVERED), 0);
   SmsManager sms = SmsManager.getDefault();
   sms.sendTextMessage(phoneNumber, null, message, sentPI, deliveredPI);
}

最後に、アクティビティの停止時にレシーバーの登録を解除します。

@Override
protected void onStop()
{
  unregisterReceiver(sendBroadcastReceiver);
  unregisterReceiver(deliveryBroadcastReceiver);
  super.onStop();
}
于 2014-01-10T16:59:26.850 に答える