1

電話の時間が変わった場合は、いくつかのアクションを実行する必要があります。時間の変化を聞くにはどうすればよいですか?

具体的には、ユーザーが入力した特定の日付が来たらSMSを送信したいと思います。

私はそれをサービスを通して実行します。ポイントは、SMSを送信する日付が来たかどうかを常に確認する必要があるということです

import java.text.SimpleDateFormat;
import java.util.Date;

import android.app.PendingIntent;
import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.telephony.gsm.SmsManager;

public class SmsService extends Service{
    String date, messege, numberphone;
    @Override
    public IBinder onBind(Intent arg0) {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        date=intent.getStringExtra("date"); 
        String[] dateArray = date.split(",");
        Date dateTime = new Date();


        if(dateArray[0].equals(Integer.toString(dateTime.getDate(
                ))) &&dateArray[1].equals(Integer.toString(dateTime.getMonth(
                ))) && dateArray[2].equals(Integer.toString(dateTime.getYear())))   
            sendSMS(intent.getStringExtra("numberphone"),intent.getStringExtra("message"));
        return super.onStartCommand(intent, flags, startId);
    }



    @SuppressWarnings("deprecation")
    private void sendSMS(String phoneNumber, String message)
    {        
        PendingIntent pi = PendingIntent.getActivity(this, 0,
                new Intent(this, SmsActivity.class), 0);

        SmsManager sms = SmsManager.getDefault();
        sms.sendTextMessage(phoneNumber, null, message, pi, null);        
    }  


}
4

2 に答える 2

3

アクション"android.intent.action.TIME_SET"を使用してBroadCastReceiverを作成し、Receiverクラスを設定します。

AndroidManifestファイルでは、

 <receiver android:name=".MyReceiver">
            <intent-filter >
                <action android:name="android.intent.action.TIME_SET"/>
            </intent-filter>
 </receiver>

BroadCastReceiverクラス

MyReceiver.java

public class MyReceiver extends BroadcastReceiver{

    @Override
    public void onReceive(final Context arg0, Intent arg1) {
        Log.d("MyReceiver", "Time Changed");
    }
}
于 2012-05-07T14:10:38.820 に答える
0

getActivity().registerReceiver(networkreceiever,new IntentFilter("android.intent.action.TIME_SET"));

しかし、問題は、アクティビティの一時停止時にレシーバーの登録を解除しているため、日付を変更するとレシーバーがすでに破棄されていることです。

于 2014-09-18T08:01:05.797 に答える