0

我有在指定时间发送短信的服务,但我注意到同一条消息被多次接收。不知道为什么会这样。

在设置发送短信的时间后11:45 pm,我在11:45 pm, 05:58 am,09:58 am和收到了 4 次相同的信息01:01 pm

这是我发送短信的代码:

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

在服务中,对您的主代码使用“onCreate”操作,而不是“onStartCommand()”。

于 2013-04-04T09:49:53.863 回答
0

这可能是您手机其他地方的问题,导致无法正确响应已发送的 SMS。

我在 Android 4.0.4 (ICS) 上运行的 Sony Xperia Pro (MK16i) 也遇到了同样的问题。

每当我安装一个在摇晃、扭曲或转动时关闭屏幕的应用程序时,就会出现问题:一条短信的多个副本。当我禁用它甚至更好地卸载它时,一切都变得正常。显然,该应用程序阻止将 SMS-Receive-Reports 发送回 SMS 提供商(电话公司)的服务器。然后这些认为没有收到短信(电话关闭或类似的东西)蚂蚁尝试在 10 分钟左右(取决于提供商)后再次尝试。这会导致多张收据。直到手机有机会发回 SMS-Receive-Reports。然后整个马戏团停止了。直到下一条短信。

尝试查看是否有东西使用了设备控制插槽(请参阅设置安全)。尝试禁用它或卸载它。或者获取更新的手机或 Android 版本。不然我也不知道。

干杯,伊姆雷

于 2013-10-07T09:06:13.450 回答