使用AlarmManager广播以调用活动

时间:2015-08-12 06:52:54

标签: android android-activity broadcastreceiver alarmmanager

我想使用Alarm manager在另一个活动中调用方法 我使用广播呼叫报警管理器 我想要在没有ui的情况下调用activityAlarm(只是报警方法) 我不想要打开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");
    }
}

2 个答案:

答案 0 :(得分:1)

((ActivityAlarm)getActivity())。alarm();

这应该适合你。

答案 1 :(得分:1)

要在没有用户界面的情况下进行调用,您应该使用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);

这样就没有用户界面(因为它不会启动活动),你可以将alarm方法放到BroadcastReceiver

有关BroadcastReceiverhttps://developer.android.com/reference/android/content/BroadcastReceiver.html

的更多信息