Android 如何在alarmmanager事件中使用DialogBox解决这些多个问题?

Android 如何在alarmmanager事件中使用DialogBox解决这些多个问题?,android,alarmmanager,powermanager,Android,Alarmmanager,Powermanager,我有一个alarmmanager onReceive事件处理程序,从中获取唤醒锁 需要帮助检查Powermanager处理是否正确: public class PowerMgr { private static WakeLock wlstatic=null; synchronized public static void acquire(long timeout){ wlstatic.acquire(timeout); } synchronized public static voi

我有一个alarmmanager onReceive事件处理程序,从中获取唤醒锁

需要帮助检查Powermanager处理是否正确:

public class PowerMgr {
private static WakeLock wlstatic=null;

synchronized public static void acquire(long timeout){
    wlstatic.acquire(timeout);
}

synchronized public static void release(){
        wlstatic.release();
}

synchronized public static void getLock(Context ctx){
    if(wlstatic==null){
        PowerManager mgr = (PowerManager) ctx.getSystemService(Context.POWER_SERVICE);
        wlstatic = mgr.newWakeLock(PowerManager.ON_AFTER_RELEASE|PowerManager.PARTIAL_WAKE_LOCK,"My WakeLock");
        wlstatic.setReferenceCounted(true);
    }
}
}
以下是AlarmReceive类中的:


public void onReceive(Context arg0, Intent arg1) {
PowerMgr.getLock(arg0);
PowerMgr.acquire(15*1000); //I expect max 2 seconds of work. provisioned 15

String oldMsg=""; 
long nextAlarm=136570003045L; //Dummy code
String msg="newmessage"; //dummy code
if(arg1.hasExtra("ALARMMESSAGE")) {
    oldMsg = arg1.getExtras().getString("ALARMMESSAGE");
    arg1.removeExtra("ALARMMESSAGE");
}

AlarmManager am= (AlarmManager)arg0.getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(arg0, AlarmReceiver.class);
if(arg1.getExtras()== null) {
intent.putExtra("ALARMMESSAGE", (String)null);
} else {
intent.putExtra("ALARMMESSAGE", msg);
}
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
PendingIntent pendingIntent = PendingIntent.getBroadcast(arg0, 0, intent, 0);
am.set(AlarmManager.RTC_WAKEUP, nextAlarm, pendingIntent);

Intent i=new Intent();
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
i.setClass(arg0, AlarmMessage.class);
i.putExtra("ALARMMESSAGE", oldMsg);
arg0.startActivity(i);
}
现在最大的问题是,当我的AlarmMessage类执行时,它不会显示OnCreate[抛出异常]中的对话框。当将其放入WindowFocus时,它会显示出来。我认为这是由于活动生命周期造成的,对此我并不确定

此外,如果进程未运行,AlarmMessage活动将出现,单击OK(确定)后,隐藏自己而不是关闭。当我使用“最近的应用程序”系统按钮恢复时,onwindowfocus事件再次触发,这是不需要的。请帮忙

AlarmMessage类:


protected void onCreate(Bundle savedInstanceState) {
//Ringtone play
}
public void onWindowFocusChanged(boolean hasFocus) {
super.onWindowFocusChanged(hasFocus);
        try{
            wd=this.getWindow();
            ctx=wd.getContext();

            alert = new AlertDialog.Builder(ctx);
            alert.setTitle(getString(R.string.dbtable));
            Intent i = getIntent();
            if(getIntent().hasExtra("ALARMMESSAGE")) {
                alert.setMessage(i.getExtras().getString("ALARMMESSAGE"));
            }
            alert.setPositiveButton("OK", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int whichButton) {if(r!=null && r.isPlaying()) r.stop(); 
                    dialog.dismiss(); finish();}
            });
            alertDialog = alert.create();
            alertDialog.show();
        }catch(Exception e){}
    }

唤醒功能正常,但我必须点击手机上的“开机”按钮,如果手机正在睡眠,则显示屏幕-此时系统显示主屏幕,而不是应用程序。由于以上更改,现在我看不到消息!这里真的很困惑。。。所需帮助已使用:android:excludeFromRecents=“true”