0

アクティビティには次のものがあります。ユーザーがアプリにログインすると、基本的に AlarmManager が設定されます。その後、AlarmManager は、電話機の DB からトランザクションを削除する別のアクティビティを定期的に呼び出します。これはすべて正常に機能します。

// get a Calendar object with current time
Calendar cal = Calendar.getInstance();
// add 5 minutes to the calendar object
cal.add(Calendar.MINUTE, 1);
Intent intent = new Intent(EntryActivity.this, AlarmReceiver.class);
intent.putExtra("alarm_message", "deleting transactions");
// In reality, you would want to have a static variable for the request code instead of 192837
PendingIntent sender = PendingIntent.getBroadcast(EntryActivity.this, 192837,
                                    intent, PendingIntent.FLAG_UPDATE_CURRENT);
// Get the AlarmManager service
AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);
//am.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), sender);
am.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), 15000, sender);

.

public class AlarmReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        try {
            Bundle bundle = intent.getExtras();
            String message = bundle.getString("alarm_message");
            Toast.makeText(context, message, Toast.LENGTH_SHORT).show();
            Intent myIntent = new Intent(context, SendOutstandingTransactions.class);
            myIntent.setAction("com.carefreegroup.startatboot.MyService");
            context.startService(myIntent);
        } catch (Exception e) {
            Toast.makeText(context, "There was an error somewhere, but we still"
                            + " received an alarm", Toast.LENGTH_SHORT).show();
            e.printStackTrace();
        }
    }
}

.

public class SendOutstandingTransactions extends IntentService {

    private static final String TAG = SendOutstandingTransactions.class.getSimpleName();
    NfcScannerApplication nfcscannerapplication;
    Cursor c;

    @Override
    public void onCreate() {
        nfcscannerapplication = (NfcScannerApplication)getApplication();
        super.onCreate();
    }

    @Override
    protected void onHandleIntent(Intent intent) {
        nfcscannerapplication.loginValidate.deleteTableTransactions();
    }

    public SendOutstandingTransactions() {
        super("SendOutstandingTransactions");
    }
}// end of class

トランザクションを定期的に削除するサービスは、ユーザーが最初にアプリにログインしたときにのみ呼び出されます。その時点から無期限に実行されます。ユーザーが電話を再起動するとどうなりますか? サービスは、ユーザーが次回ログインしたときにのみ再開されます。

BootReceiver はありますが、AlarmManager の接続方法がわかりません。以下を試しましたが、ALARM_SERVICE を解決できません。これは正しい線ですか?

public class MyBootReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {

        //  Intent myIntent = new Intent(context, SendOutstandingTransactions.class);
        //  myIntent.setAction("com.carefreegroup.startatboot.MyService");
        //  context.startService(myIntent);

        // get a Calendar object with current time
        Calendar cal = Calendar.getInstance();
        // add 5 minutes to the calendar object
        cal.add(Calendar.MINUTE, 1);
        Intent intent = new Intent(MyBootReceiver.this, AlarmReceiver.class);
        intent.putExtra("alarm_message", "deleting transactions");
        // In reality, you would want to have a static variable for the request code instead of 192837
        PendingIntent sender = PendingIntent.getBroadcast(context, 192837,
                                    intent, PendingIntent.FLAG_UPDATE_CURRENT);
        // Get the AlarmManager service
        AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);
        //am.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), sender);
        am.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), 15000, sender);
    }
}
4

1 に答える 1

1

getSystemServiceで利用できますContext。( で受け取りますonReceive

やったほうがいい:

AlarmManager am = (AlarmManager) context.getSystemService(context.ALARM_SERVICE);
于 2012-10-10T13:14:00.487 に答える