8

我正在处理日历事件提醒。Android 中没有本地日历事件提醒,因此用户安装不同的日历应用程序。

现在,这些应用程序可以在提醒事件上有所不同,例如可以显示提醒通知。现在我希望我在这些事件日历应用程序中以编程方式设置一个事件,并且在到达时间时不显示任何通知,而是会显示一条弹出消息,并带有警报声。那时我使用该站点的代码。它可以工作,但它以通知的形式显示提醒。

这是代码:

接收

void doReminderWork(Intent intent) {
    Long rowId = intent.getExtras().getLong(RemindersDbAdapter.KEY_ROWID);

    NotificationManager mgr = (NotificationManager)getSystemService(NOTIFICATION_SERVICE);

    Intent notificationIntent = new Intent(this, ReminderEditActivity.class); 
    notificationIntent.putExtra(RemindersDbAdapter.KEY_ROWID, rowId); 

    PendingIntent pi = PendingIntent.getActivity(this, 0, notificationIntent, PendingIntent.FLAG_ONE_SHOT); 

    Notification note=new Notification(android.R.drawable.stat_sys_warning, getString(R.string.notify_new_task_message), System.currentTimeMillis());
    note.setLatestEventInfo(this, getString(R.string.notify_new_task_title), getString(R.string.notify_new_task_message), pi);
    note.defaults |= Notification.DEFAULT_SOUND; 
    note.flags |= Notification.FLAG_AUTO_CANCEL; 


    int id = (int)((long)rowId);
    mgr.notify(id, note);
}

现在我想显示一个对话框而不是通知,所以如何通过使用这些代码行来在对话框中使用这个待处理的意图。

 Intent notificationIntent = new Intent(this, ReminderEditActivity.class); 
notificationIntent.putExtra(RemindersDbAdapter.KEY_ROWID, rowId); 

PendingIntent pi = PendingIntent.getActivity(this, 0, notificationIntent, PendingIntent.FLAG_ONE_SHOT); 
4

1 回答 1

17

在您的Receiver 类中,只需编写代码来显示对话框而不是通知。

显示对话框的类:

public class AlarmDialogPopUp extends Activity
{

    private int m_alarmId;

    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);

        // Get the alarm ID from the intent extra data
        Intent intent = getIntent();
        Bundle extras = intent.getExtras();

        if (extras != null) {
            m_alarmId = extras.getInt("AlarmID", -1);
        } else {
            m_alarmId = -1;
        }

        // Show the popup dialog
        showDialog(0);
    }

    @Override
    protected Dialog onCreateDialog(int id)
    {
        super.onCreateDialog(id);

        // Build the dialog
        AlertDialog.Builder alert = new AlertDialog.Builder(this);

        alert.setTitle("ALARM REMINDER");
        alert.setMessage("Its time for the alarm ");
        alert.setCancelable(false);

        alert.setPositiveButton("Dismiss", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int whichButton) {
                AlarmDialogPopUp.this.finish();
            }
        });

        // Create and return the dialog
        AlertDialog dlg = alert.create();

        return dlg;
    }
}

在您onReceive的显示对话框中:

public void onReceive(Context context, Intent intent)
    {
          // Launch the alarm popup dialog
            Intent alarmIntent = new Intent("android.intent.action.MAIN");

            alarmIntent.setClass(context, AlarmDialogPopUp .class);
            alarmIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

            // Pass on the alarm ID as extra data
            alarmIntent.putExtra("AlarmID", intent.getIntExtra("AlarmID", -1));

            // Start the popup activity
            context.startActivity(alarmIntent);

    }

根据评论编辑:

要播放声音,您需要使用 MediaPlayer,如下所示。

onCreate()在活动类中添加此行AlarmDialogPopUp以播放声音。

MediaPlayer mediaPlayer; //global variable.

    mediaPlayer = MediaPlayer.create(this,R.raw.alarmsound);

在对话框中添加以下行onClick()以停止声音:

mediaPlayer.stop();
mediaPlayer.release();

希望这可以帮助。

于 2013-04-08T08:33:31.867 回答