使用 AlarmManager 进行广播以调用 activity

Broadcasting with AlarmManager to call activity

我想使用警报管理器调用另一个 activity 中的方法 我用广播呼叫报警器管理员 我只想调用 activity 没有 ui 的警报(只是警报方法) 我不想打开 ui, 我该怎么办?

public class ReciveData extends BroadcastReceiver {

    @Override
    public void onReceive(Context arg0, Intent arg1) {
        Intent myIntent = new Intent(G.context, ActivityAlarm.class);
        myIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        PendingIntent pendingIntent = PendingIntent.getActivity(G.context, 0, myIntent, PendingIntent.FLAG_UPDATE_CURRENT);
        G.alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + 2000, 3000, pendingIntent);
    }
}

还有这个:

public class ActivityAlarm extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        alarm();
    }

    public void alarm() {
        Log.i("LOGALARM", "Hello");
    }
}

((ActivityAlarm) getActivity()).alarm();

这应该适合你。

要在没有 UI 的情况下调用它,您应该使用 BroadcastReceiverService,而不是 Activity:

而不是这个:

Intent myIntent = new Intent(G.context, ActivityAlarm.class);
    myIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    PendingIntent pendingIntent = PendingIntent.getActivity(G.context, 0, myIntent, PendingIntent.FLAG_UPDATE_CURRENT);

你应该这样称呼:

 Intent myIntent = new Intent(G.context, YourReceiver.class);
    PendingIntent pendingIntent = PendingIntent.getBroadcast(G.context, 0, myIntent, 0);

有了这个就不会有UI(因为它不会启动activity),你可以把alarm方法放到你的BroadcastReceiver

有关 BroadcastReceiver 的更多信息:https://developer.android.com/reference/android/content/BroadcastReceiver.html