问题
I am working on Calender Events reminder . There is no native Calender events reminder in Android so user install different calender apps.
Now these apps can be different on reminding events like on reminder notifications can be shown. Now I want that I set an event programmatically in these event calender apps and on time reached not show any notification rather a pop up message will be shown with alarm like sound. At that I using a code from that site . Its working but it showing reminders in form of notifications.
Here is code:
OnReceive
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);
}
Now I want to show a dialog box instead of notification so how it can be possible from using these lines of code that this pending intent should be used in dialogue box.
Intent notificationIntent = new Intent(this, ReminderEditActivity.class);
notificationIntent.putExtra(RemindersDbAdapter.KEY_ROWID, rowId);
PendingIntent pi = PendingIntent.getActivity(this, 0, notificationIntent, PendingIntent.FLAG_ONE_SHOT);
回答1:
In your Receiver class, just code to get the dialog to display instead of Notification.
Class that displays Dialog:
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;
}
}
In your onReceive
to show dialog :
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);
}
EDIT based on the comment:
To play sound, you need to make use of MediaPlayer like below.
Add this line in the onCreate()
of AlarmDialogPopUp
activity class to play the sound.
MediaPlayer mediaPlayer; //global variable.
mediaPlayer = MediaPlayer.create(this,R.raw.alarmsound);
Add the below lines in the onClick()
of the dialog to stop the sound:
mediaPlayer.stop();
mediaPlayer.release();
Hope this helps.
来源:https://stackoverflow.com/questions/15874144/show-dialog-using-pendingintent