如果我不擅长写英文,我会提前道歉。 我正在编写一个简单的任务应用程序,在特定时间内提醒我。
下面我用AlarmManager设置闹钟:
private static void setAlarm(Context context, Calendar calendar,
PendingIntent pIntent) {
AlarmManager alarmManager = (AlarmManager) context
.getSystemService(Context.ALARM_SERVICE);
if (android.os.Build.VERSION.SDK_INT >=
android.os.Build.VERSION_CODES.KITKAT) {
alarmManager.setExact(AlarmManager.RTC_WAKEUP,
calendar.getTimeInMillis(), pIntent);
} else {
alarmManager.set(AlarmManager.RTC_WAKEUP,
calendar.getTimeInMillis(), pIntent);
}
}
然后是AlarmManagerHelper:
public class AlarmManagerHelper extends BroadcastReceiver {
public void onReceive(Context context, Intent intent) {
String title = intent.getStringExtra("Title");
int hour = intent.getIntExtra("Hour", 0);
int min = intent.getIntExtra("Minute", 0);
String alarmTone = intent.getStringExtra("AlarmTone");
Intent i = new Intent();
i.setClassName("com.example.tasks",
"com.example.tasks.AlarmScreenActivity");
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
i.putExtra("Title", title);
i.putExtra("Hour", hour);
i.putExtra("Minute", min);
i.putExtra("AlarmTone", alarmTone);
context.startActivity(i);
}
}
和AlarmScreenActivity是:
public class AlarmScreenActivity extends Activity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// get intent
pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "My Tag");
wl.acquire();
mPlayer = new MediaPlayer();
try {
if (task_Tone != null && !task_Tone.equals("")) {
android.net.Uri toneUri = android.net.Uri.parse(task_Tone);
if (toneUri != null) {
mPlayer.setDataSource(this, toneUri);
mPlayer.setAudioStreamType(AudioManager.STREAM_ALARM);
mPlayer.setLooping(true);
mPlayer.prepare();
mPlayer.start();
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
// some code
public void onClickDissmis(View view) {
mPlayer.stop();
finish();
}
protected void onDestroy() {
super.onDestroy();
wl.release();
}
}
然后使用AlarmManagerHelper和AlarmScreenActivity显示它。
我的问题是: 在特定的时间,应该唤醒和振铃不做int,所以当我按下电源按钮一个转动屏幕就是工作???! (当处于调试模式且设备连接到系统正常工作时) 我希望能完美地描述我的问题。
答案 0 :(得分:0)
我完全不了解你的问题。但我可以说,Android只保证它在传送广播时持有唤醒锁。您的代码会在接收广播,接收方和您抓住唤醒锁的时间之间留出相当长的时间。在这段时间内,没有什么可以阻止设备重新进入睡眠状态。
答案 1 :(得分:0)
当AlarmManagerHelper.onReceive
运行时,系统会保持锁定(因为警报管理器)不会失败。但是在context.startActivity(i);
和活动开始之间,系统再次入睡。您需要使用WakefulBroadcastReceiver(请参阅BroadcastReceiver Vs WakefulBroadcastReceiver)或(我使用的)WakefulIntentService。
无论如何,您需要启动服务并从那里开始您的活动。对于WakefulIntentService模式,请参阅我的回答PowerManager.PARTIAL_WAKE_LOCK android并链接到那里。