私のアプリはジオフェンシングに関するものです。ジオフェンスが起動されたら、SMSを送信する必要があります。インテントサービスからSMSを送信する - SMSが送信されたかどうかを確認するためにブロードキャストを受信できません
これはほぼ完璧ですが、SMSが送信されたかどうかを確認するためにブロードキャストを受信することはできません。私は自分自身を説明します:
ユーザーがジオフェンスを入力すると、ジオフェンスインテントサービスが呼び出され、SMSが送信されます。それは魅力的なように機能しますが、SMSが送信されたか、何らかのトラブル(信号がない)があって再送信しようとしているかどうかを確認する必要があります。
だから、最初に私は、SMSをこのように送信しようとしている:
private void sendsms() {
String SMS_SENT = "SMS_SENT";
final PendingIntent sentPendingIntent = PendingIntent.getBroadcast(this, 0, new Intent(), PendingIntent.FLAG_UPDATE_CURRENT);
// check if SMS has been sent
smsSentReceiver =new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
switch (getResultCode()) {
case Activity.RESULT_OK:
Log.e("SMS", "SMS sent successfully");
break;
case SmsManager.RESULT_ERROR_GENERIC_FAILURE:
Log.e("SMS","Generic failure cause");
break;
case SmsManager.RESULT_ERROR_NO_SERVICE:
Log.e("SMS", "Service is currently unavailable");
break;
case SmsManager.RESULT_ERROR_NULL_PDU:
Log.e("SMS", "No pdu provided");
break;
case SmsManager.RESULT_ERROR_RADIO_OFF:
Log.e("SMS", "Radio was explicitly turned off");
break;
}
}
};
registerReceiver(smsSentReceiver, new Intent());
// Get the default instance of SmsManager
// Send a text based SMS
SmsManager smsMgr = SmsManager.getDefault();
smsMgr.sendTextMessage(towhom, null, customtxt, sentPendingIntent, null);
これは働かないが、SMSが送信された後に何も起こらない、まったくのログ。その後
は、私は受信機を作成し、マニフェストに入れて、この他の方法を試してみました:
private smsSentReceiver smsSentReceiver;
private void sendsms() {
final PendingIntent sentPendingIntent = PendingIntent.getBroadcast(this, 0, new Intent(), PendingIntent.FLAG_UPDATE_CURRENT);
smsSentReceiver = new smsSentReceiver();
registerReceiver(smsSentReceiver, new IntentFilter());
// Get the default instance of SmsManager
// Send a text based SMS
SmsManager smsMgr = SmsManager.getDefault();
smsMgr.sendTextMessage(towhom, null, customtxt, sentPendingIntent, null);
そして、これはsmsSentReceiver.java
public class smsSentReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
switch (getResultCode()) {
case Activity.RESULT_OK:
Log.e("SMS", "SMS sent successfully");
break;
case SmsManager.RESULT_ERROR_GENERIC_FAILURE:
Log.e("SMS","Generic failure cause");
break;
case SmsManager.RESULT_ERROR_NO_SERVICE:
Log.e("SMS", "Service is currently unavailable");
break;
case SmsManager.RESULT_ERROR_NULL_PDU:
Log.e("SMS", "No pdu provided");
break;
case SmsManager.RESULT_ERROR_RADIO_OFF:
Log.e("SMS", "Radio was explicitly turned off");
break;
}
}
}
とマニフェストです:
<receiver
android:name=".smsSentReceiver"
android:enabled="true"
>
</receiver>
SMSステータスについてのログもありません...
なぜ私はSMSステータスを取得していないのですか?
PS:唯一のエミュレータ上でテストしました
編集:私が試した
最後のものは@マイクM.コメントによると、これを次のとおりです。
private void sendsms() {
final PendingIntent sentPendingIntent = PendingIntent.getBroadcast(this, 0, new Intent(this, smsSentReceiver.class), PendingIntent.FLAG_CANCEL_CURRENT);
SmsManager smsMgr = SmsManager.getDefault();
smsMgr.sendTextMessage(towhom, null, customtxt, sentPendingIntent, null);
そして、まだ何も..
'IntentService'は' onHandleIntent() 'が終了すると自動的に停止するので、動的に登録されたReceiverでブロードキャストを取得することはありません。しかし、両方の試みで同じ問題があります。現在は 'new Intent()'です。それはどこにも行きません。マニフェストに ''要素が正しく指定されていれば、静的に登録された要素を 'new Intent(this、smsSentReceiver.class)'に変更すると動作します。そのスニペット内の 'smsSentReceiver'インスタンスと' registerReceiver() 'コールは、静的に登録されたクラスでは不要なので削除できます。 –
* smsが送信された後は何も起こりません。ログは一切ありません。*コードを共有していないので、わからないことがあります。しかし、私はあなたのインテントサービスが既に完了し、イベントが送信される時点で停止していると推測しています –
@MikeM。あなたが言った帽子を試しました。私はこれを変更しました: final PendingIntent sentPendingIntent = PendingIntent.getBroadcast(0、新しいインテント(this、smsSentReceiver.class)、PendingIntent.FLAG_CANCEL_CURRENT); まだ動作していません... – algarrobo