从 AlarmManger 弹出一个 AlertDialog

Posted

技术标签:

【中文标题】从 AlarmManger 弹出一个 AlertDialog【英文标题】:Pop an AlertDialog from AlarmManger 【发布时间】:2013-04-23 21:32:21 【问题描述】:

我正在尝试让 BroadcastReceiver 运行一个 AlertDialog,它只是跳过了对 Dialog 方法的调用(并引发了 catch 异常): 我的广播接收器:

public void onReceive(Context context, Intent intent) 
        this.con = context;
        try 
                    
            PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
            PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "YOUR TAG");
            //Acquire the lock
            wl.acquire();

            intent.getExtras();
            new StringBuilder();
            wl.release();
            String[] a ="a","b";
            create(context, a); //The Dialog Call
            setOnetimeTimer(con);
            Toast.makeText(context, "Hurray!", Toast.LENGTH_SHORT).show();

         
        catch (Exception e) 
        
             Toast.makeText(context, "Error,broadcastReciver"+e.getMessage(), Toast.LENGTH_LONG).show();
             e.printStackTrace();
        
   

这是create() 方法:(创建对话框) 公共静态无效创建(上下文上下文,字符串[]描述)

        AlertDialog.Builder builder = new AlertDialog.Builder(context);
        builder.setCancelable(true);
        builder.setTitle("Random String");
        builder.setMessage(descriptions[rn.nextInt(2)]);
        //builder.setMessage("test");
        builder.setInverseBackgroundForced(false);
        builder.setPositiveButton("Close",
                new DialogInterface.OnClickListener() 
                    @Override
                    public void onClick(DialogInterface dialog,
                            int which) 
                        dialog.dismiss();
                    
                );
        AlertDialog alert = builder.create();
        alert.show();
    

谢谢! 编辑:不要说我把它放在一个活动中并运行活动,因为我不希望它打开我的应用程序,我希望它在打开的应用程序之上。

【问题讨论】:

【参考方案1】:

如果不设置日历的较长持续时间字段(例如年份),您似乎是在当前时间之前设置了闹钟。试试这样的:

Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.add(Calendar.MINUTES, 23*60 + 58);

【讨论】:

【参考方案2】:

(编辑前)1.i 调用类Dialog,所以当Intent 试图调用Dialog.class 时,它会在系统类Dialog 中调用。 2.我用过: How do I create a transparent Activity on android? 为了使活动透明,我没有使用ContentView,所以只有已经打开的活动上方的对话框弹出。

【讨论】:

以上是关于从 AlarmManger 弹出一个 AlertDialog的主要内容,如果未能解决你的问题,请参考以下文章

获取当前位置位置android

Android PendingIntent

Android取消所有alarmmanager

从屏幕底部弹出一个小弹出窗口使用啥 Widget Flutter

从 jqModal 打开另一个弹出窗口

android 7.0变化