0

指定した時間にSMSを送信するサービスを利用していますが、同じメッセージが複数回受信されていることに気付きました。なぜそれが起こるのかわからない。

SMS を送信する時間を設定した後、 、、および11:45 pmで同じメッセージを 4 回受け取りました。11:45 pm05:58 am09:58 am01:01 pm

SMSを送信するための私のコードは次のとおりです。

Intent myIntent = new Intent(AlarmActivity.this,
                    SendSmsService.class);
            pendingIntent = PendingIntent.getService(AlarmActivity.this, 0,
                    myIntent, 0);

            AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);

            Calendar cal = Calendar.getInstance();
            cal.set(Calendar.HOUR_OF_DAY, TimePreference.getHour(sendTime));
            cal.set(Calendar.MINUTE, TimePreference.getMinute(sendTime));
            cal.set(Calendar.SECOND, 0);
            cal.set(Calendar.MILLISECOND, 0);
            alarmManager.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(),
                    pendingIntent);

そして、ここにSendSmsService.javaがあります

public class SendSmsService extends Service
{
    private static final String TAG = SendSmsService.class.getSimpleName();

    String CompleteAddr, eContact1, eContact2, eContact3;
    String smsString;
    boolean acknowledged;

    @Override
    public void onCreate() {
        // TODO Auto-generated method stub
        Toast.makeText(this, "Service Started", Toast.LENGTH_LONG).show();
        super.onCreate();
    }

    @Override
    public IBinder onBind(Intent intent) {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public void onDestroy() {
        // TODO Auto-generated method stub
        super.onDestroy();
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        // TODO Auto-generated method stub
        Log.v(TAG, "onStartCommand");
        getSharedSettings();

        if (acknowledged == false) {
            if (eContact1 != "")
                sendSMS(eContact1, smsString + CompleteAddr);
            if (eContact2 != "")
                sendSMS(eContact2, smsString + CompleteAddr);
            if (eContact3 != "")
                sendSMS(eContact3, smsString + CompleteAddr);
        }
        return super.onStartCommand(intent, flags, startId);
    }

    @Override
    public boolean onUnbind(Intent intent) {
        // TODO Auto-generated method stub
        return super.onUnbind(intent);
    }

    private void sendSMS(String phoneNumber, String message) {
        SmsManager sms = SmsManager.getDefault();
        sms.sendTextMessage(phoneNumber, null, message, null, null);
    }   
}

任意の提案やアイデアをいただければ幸いです
ありがとう

4

2 に答える 2

0

サービスでは、「onStartCommand()」ではなく、メイン コードに「onCreate」アクションを使用します。

于 2013-04-04T09:49:53.863 に答える
0

これは、送信された SMS への正しい応答を妨げる、電話の他の場所で発生した問題である可能性があります。

Android 4.0.4 (ICS) で動作する Sony Xperia Pro (MK16i) でも同じ問題が発生しました。

振ったり、ひねったり、回したりすると画面がオフになるアプリをインストールするたびに、SMS の複数のコピーが発生します。無効にするか、アンインストールすると、すべてが正常になります。どうやらアプリは、SMS-Receive-Reports が SMS プロバイダー (電話会社) のサーバーに送り返されるのを防ぎます。次に、SMS が受信されなかった (電話が切れたなど) と判断し、10 分ほど (プロバイダーによって異なります) 後に再度試行します。これにより、複数の領収書が発生します。電話が SMS-Receive-Reports を返信する機会を得るまで。その後、サーカス全体が停止します。次の SMS まで。

何かがデバイス制御スロットを使用しているかどうかを確認してください (settings-security を参照)。無効にするか、アンインストールしてみてください。または、新しいスマートフォンまたは Android バージョンを入手してください。そうでなければ、私も知りません。

乾杯、イムレ

于 2013-10-07T09:06:13.450 に答える