AlarmManager.ELAPSED_REALTIME_WAKEUP 在 android 中究竟做了什么
What does exactly AlarmManager.ELAPSED_REALTIME_WAKEUP do in android
我正在尝试学习 AlarmManager,在 android.I 遇到 doc 以了解 AlarmManager.ELAPSED_REALTIME_WAKEUP 的用法。但是当我在我的应用程序中使用它以及当应用程序 运行,我点击后退按钮以为警报管理器会在此处设置的警报间隔时间后再次调用 activity
alarmMgr.set(AlarmManager.ELAPSED_REALTIME_WAKEUP,
SystemClock.elapsedRealtime()+10*1000, alarmIntent);
但是没有happens.Please有人解释AlarmManager.ELAPSED_REALTIME_WAKEUP
的意思。
MainActivity.java
public class MainActivity extends AppCompatActivity {
private AlarmManager alarmMgr;
private PendingIntent alarmIntent;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
alarmMgr = (AlarmManager)this.getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(this, AlarmReceiver.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
alarmIntent = PendingIntent.getActivity(this, 0, intent,0);
Log.d("asd","initialized alarmintent");
alarmMgr.set(AlarmManager.ELAPSED_REALTIME_WAKEUP,
SystemClock.elapsedRealtime()+10*1000, alarmIntent);
Log.d("asd", "alarm set");
}
}
AlarmReceiver.java
public class AlarmReceiver extends AppCompatActivity
{
TextView tv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.intent_layout);
Log.d("asd","writing textview");
tv=(TextView)findViewById(R.id.textview);
tv.setText("called");
}
}
我会使用 AlarmManager.RTC_WAKEUP
而不是 AlarmManager.ELAPSED_REALTIME_WAKEUP
。这是我如何在最近的应用程序中使用 AlarmManager 的示例:
MainActivity.class:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Intent intent = new Intent(this, AlarmReceiver.class);
final PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, intent, 0);
mAlarmManager = (AlarmManager) this.getSystemService(Context.ALARM_SERVICE);
// Cancel any existing service(s)
mAlarmManager.cancel(pendingIntent);
// Start service
long alarmTime = System.currentTimeMillis() + 10000L; // 10 seconds from now
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
mAlarmManager.setAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, alarmTime, pendingIntent);
} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
mAlarmManager.setExact(AlarmManager.RTC_WAKEUP, alarmTime, pendingIntent);
} else {
mAlarmManager.set(AlarmManager.RTC_WAKEUP, alarmTime, pendingIntent);
}
}
AlarmReceiver.class:
public class AlarmReceiver extends BroadcastReceiver {
public AlarmReceiver() { }
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context, "AlarmService Triggered.", Toast.LENGTH_SHORT).show();
Log.d(this.getClass().getSimpleName(), "Service triggered");
}
}
您的 AlarmReceiver class 似乎正在扩展 AppCompatActivity
,这将不起作用 - 您需要像我一样扩展 Broadcast Receiver
。然后,在 AlarmReceiver 的 onReceive()
函数中,您需要导航到所需的 Activity,如下所示:
Intent newIntent = new Intent(context, NewActivity.class);
context.startActivity(newIntent);
尝试这些更改,看看它们是否有效!
您的代码应该可以正常工作。
确保您已在清单中声明您的 AlarmReceiver activity,例如:
<activity
android:name=".AlarmReceiver"
android:label="@string/title_activity_alarm_receiver"
android:theme="@style/AppTheme.NoActionBar"></activity>
我正在尝试学习 AlarmManager,在 android.I 遇到 doc 以了解 AlarmManager.ELAPSED_REALTIME_WAKEUP 的用法。但是当我在我的应用程序中使用它以及当应用程序 运行,我点击后退按钮以为警报管理器会在此处设置的警报间隔时间后再次调用 activity
alarmMgr.set(AlarmManager.ELAPSED_REALTIME_WAKEUP,
SystemClock.elapsedRealtime()+10*1000, alarmIntent);
但是没有happens.Please有人解释AlarmManager.ELAPSED_REALTIME_WAKEUP
的意思。
MainActivity.java
public class MainActivity extends AppCompatActivity {
private AlarmManager alarmMgr;
private PendingIntent alarmIntent;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
alarmMgr = (AlarmManager)this.getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(this, AlarmReceiver.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
alarmIntent = PendingIntent.getActivity(this, 0, intent,0);
Log.d("asd","initialized alarmintent");
alarmMgr.set(AlarmManager.ELAPSED_REALTIME_WAKEUP,
SystemClock.elapsedRealtime()+10*1000, alarmIntent);
Log.d("asd", "alarm set");
}
}
AlarmReceiver.java
public class AlarmReceiver extends AppCompatActivity
{
TextView tv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.intent_layout);
Log.d("asd","writing textview");
tv=(TextView)findViewById(R.id.textview);
tv.setText("called");
}
}
我会使用 AlarmManager.RTC_WAKEUP
而不是 AlarmManager.ELAPSED_REALTIME_WAKEUP
。这是我如何在最近的应用程序中使用 AlarmManager 的示例:
MainActivity.class:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Intent intent = new Intent(this, AlarmReceiver.class);
final PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, intent, 0);
mAlarmManager = (AlarmManager) this.getSystemService(Context.ALARM_SERVICE);
// Cancel any existing service(s)
mAlarmManager.cancel(pendingIntent);
// Start service
long alarmTime = System.currentTimeMillis() + 10000L; // 10 seconds from now
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
mAlarmManager.setAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, alarmTime, pendingIntent);
} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
mAlarmManager.setExact(AlarmManager.RTC_WAKEUP, alarmTime, pendingIntent);
} else {
mAlarmManager.set(AlarmManager.RTC_WAKEUP, alarmTime, pendingIntent);
}
}
AlarmReceiver.class:
public class AlarmReceiver extends BroadcastReceiver {
public AlarmReceiver() { }
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context, "AlarmService Triggered.", Toast.LENGTH_SHORT).show();
Log.d(this.getClass().getSimpleName(), "Service triggered");
}
}
您的 AlarmReceiver class 似乎正在扩展 AppCompatActivity
,这将不起作用 - 您需要像我一样扩展 Broadcast Receiver
。然后,在 AlarmReceiver 的 onReceive()
函数中,您需要导航到所需的 Activity,如下所示:
Intent newIntent = new Intent(context, NewActivity.class);
context.startActivity(newIntent);
尝试这些更改,看看它们是否有效!
您的代码应该可以正常工作。 确保您已在清单中声明您的 AlarmReceiver activity,例如:
<activity
android:name=".AlarmReceiver"
android:label="@string/title_activity_alarm_receiver"
android:theme="@style/AppTheme.NoActionBar"></activity>