【问题标题】:Why AlarmManager doesn't respond为什么 AlarmManager 没有响应
【发布时间】:2015-09-01 01:45:39
【问题描述】:

我对遇到的这个问题感到困惑,当我将此代码放在 onCreate() 方法中时(在应用程序启动后 5 秒后触发)它运行良好,但是当我将它放在 onLocationChangeListener() 中时,代码没有不工作。代码如下:

mMap.setOnMyLocationChangeListener(new GoogleMap.OnMyLocationChangeListener() {
                @Override
                public void onMyLocationChange(Location location) {
                    float[] distance = new float[2];

                    Location.distanceBetween(location.getLatitude(), location.getLongitude(), circle.getCenter().latitude, circle.getCenter().longitude, distance);

                    if (distance[0] > circle.getRadius()) {
                        Toast.makeText(getBaseContext(), "Outside, distance from center: " + distance[0] + " meters;" + " radius: " + circle.getRadius() + " meters", Toast.LENGTH_LONG).show();
                    } else {
                        Toast.makeText(getBaseContext(), "Inside, distance from center: " + distance[0] + " meters;" + " radius: " + circle.getRadius() + " meters", Toast.LENGTH_LONG).show();

                        Intent alertIntent = new Intent(MapsActivity.this, MyService.class);
                        AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
                        alarmManager.set(AlarmManager.RTC_WAKEUP, alertTime, // alertTime is set for 1000 millis. inside onCreate()
                                PendingIntent.getBroadcast(MapsActivity.this, 1, alertIntent,
                                        PendingIntent.FLAG_UPDATE_CURRENT));

                    }
                }
            });

我也搜索了网络,但没有找到与我的问题大致相同的任何内容。

编辑:这里是MyService.java 类

public class MyService extends BroadcastReceiver {

@Override
public void onReceive(Context context, Intent intent) {
    createNotification(context, "AAAAAAAA", "ASDFG", "ASDF");
}

public void createNotification(Context context, String msg, String msgText, String msgAlert) {


    PendingIntent notificIntent = PendingIntent.getActivity(context, 0,
            new Intent(context, MapsActivity.class), 0);

    NotificationCompat.Builder mBuilder =
            new NotificationCompat.Builder(context)
                    .setSmallIcon(R.drawable.searchicon)
                    .setContentTitle(msg)
                    .setTicker(msgAlert)
                    .setContentText(msgText);

    mBuilder.setContentIntent(notificIntent);
    mBuilder.setDefaults(Notification.DEFAULT_SOUND);
    mBuilder.setAutoCancel(true);
    NotificationManager mNotificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
    mNotificationManager.notify(1, mBuilder.build());

}}

【问题讨论】:

标签: android alarmmanager


【解决方案1】:

您的闹钟已设置在过去。您是否计划好触发警报的事件顺序?以下是目前发生的情况:

  1. 已创建活动
  2. 警报时间设置为未来 1 秒(从创建活动开始)。
  3. 只有在位置变化时才会设置警报。
  4. 位置在未来某个时间会发生变化,可能已经超过 1 秒。
  5. 警报现在设置为过去的一段时间。

【讨论】:

  • 嗯实际上是一个很好的答案,但是即使我从onCreate() 中删除计时器也不起作用,但这也让我想到了另一个问题,可以删除计时器,并在 if 语句完成时设置 if (distance[0] > circle.getRadius()) ... 触发警报?
  • @StefanRafa 我不确定您所说的“即使我从...中删除计时器”是什么意思,我想我已经准确解释了为什么它不起作用。也许您可以提供更多详细信息或代码来说明您的意思。至于您的另一个问题,是的-您可以这样做。但是为什么要打扰呢?为什么不直接启动活动而不是使用警报?
  • 你能帮我解决这个问题吗,我搜索了但仍然找不到任何问题。
猜你喜欢
  • 2020-10-16
  • 2021-09-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-06
  • 2020-03-16
  • 1970-01-01
相关资源
最近更新 更多