【问题标题】:Broadcasting with AlarmManager to call activity使用 AlarmManager 广播以调用活动
【发布时间】:2015-08-12 06:52:54
【问题描述】:

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

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");
    }
}

【问题讨论】:

  • 这很可能意味着您的警报方法应该移动到单独的类(也可以设为静态)

标签: android android-activity broadcastreceiver alarmmanager


【解决方案1】:

要在没有 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

更多关于BroadcastReceiverhttps://developer.android.com/reference/android/content/BroadcastReceiver.html

【讨论】:

    【解决方案2】:

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

    这应该适合你。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多