0

私のタスクでは、リマインダー チェック プロセスを実行しました。リマインダーの時間が現在の時間と同じになると、ポップアップ ボックスが表示されます。このタスクでは、ポップアップ ボックスが正しく表示されます。

しかし、このタスクをいくつかの大きなプロセスにマージすると、リマインダータスクはメインプログラムのサブプログラムになります。他の画面でポップアップが表示されない。時間が現在の時間に達した場合、ユーザーがこのプログラムのいずれかの画面を使用している間、アラートをユーザーに表示する必要があります。

if (LDbTime <= LSysTime) {
                                    rem_id = c.getString(c.getColumnIndex("reminder_id"));
                                    remName = c.getString(c.getColumnIndex("rname"));
                                    mediaPlayer.start();
                                    handler.post(new Runnable(){
                                    public void run() {
                                        alert.setTitle("Alert :"+remName);
                                        alert.setPositiveButton("OK", new DialogInterface.OnClickListener() {
                                            public void onClick(DialogInterface dialog, int whichButton) {
                                                mediaPlayer.pause();
                                            }
                                        });
                                        alert.show();
                                        db1.execSQL("UPDATE RemainAlarmS SET expired ='TRUE' WHERE reminder_id = " + rem_id );
                                            }
                                        });
                                    Thread.sleep(5000);
                                }

このアラート メッセージでは、リマインダー ウェイクアップ時にフロント スクリーンを表示する必要があります。

解決策を見つけるのを手伝ってください..

前もって感謝します。

4

3 に答える 3

2

アクティビティがユーザーの電話でフォーカスされたアクティビティではないときにダイアログを表示する方法を尋ねようとしている場合は、代わりに通知を使用してみてください。別のアプリケーションでダイアログをポップアップすると、ユーザーが他のことをしている可能性があるときにユーザーが中断します。Android UIガイドラインから:

Use the notification system — don't use dialog boxes in place of notifications

If your background service needs to notify a user, use the standard notification system — 
don't use a dialog or toast to notify them. A dialog or toast would immediately 
take focus    and interrupt the user, taking focus away from what they were doing: 
the user could be in the middle of typing text the moment the dialog appears 
and could accidentally act on the dialog. 
Users are used to dealing with notifications and 
can pull down the notification shade at their convenience to respond to your message.

通知を作成するためのガイドはここにあります:http://developer.android.com/guide/topics/ui/notifiers/notifications.html

于 2012-09-25T07:17:04.013 に答える
2

保留中のインテントには次のコードを使用できます。

Intent i = new Intent("android.intent.action.DA");
PendingIntent operation = PendingIntent.getActivity(getBaseContext(), 0, i, Intent.FLAG_ACTIVITY_NEW_TASK);
AlarmManager alarmManager = (AlarmManager) getBaseContext().getSystemService(ALARM_SERVICE);
GregorianCalendar calendar = new GregorianCalendar(y,m,d, hr, mi);
long alarm_time = calendar.getTimeInMillis();
alarmManager.set(AlarmManager.RTC_WAKEUP  , alarm_time , operation);

そして、「android.intent.action.DA」は、DisplayNotification.java クラスのアクティビティを示します。

public class DisplayNotification extends Activity {
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    int notifID = getIntent().getExtras().getInt("NotifID");
    Intent i = new Intent("android.intent.action.AD");
    i.putExtra("NotifID", notifID);  
    PendingIntent detailsIntent =PendingIntent.getActivity(this, 0, i, 0);
    NotificationManager nm = (NotificationManager)getSystemService(NOTIFICATION_SERVICE);
    Notification notif = new Notification(R.drawable.ic_launcher,"Time's up!",System.currentTimeMillis());
    CharSequence from = "AlarmManager - Time's up!";
    CharSequence message = "This is your alert, courtesy of the AlarmManager";        
    notif.setLatestEventInfo(this, from, message, detailsIntent);
    notif.vibrate = new long[] { 100, 250, 100, 500};        
    nm.notify(notifID, notif);
    finish();
}
}

そして、「android.intent.action.AD」は AlarmDetails.java クラスを示します

public class AlarmDetails extends Activity {


@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.alarmdetails);

    NotificationManager nm = (NotificationManager) 
            getSystemService(NOTIFICATION_SERVICE);
        //---cancel the notification---
        nm.cancel(getIntent().getExtras().getInt("NotifID")); 
}

}

これがお役に立てば幸いです!

于 2012-10-05T05:12:36.123 に答える
-1

代わりにステータス バー通知を使用できます。

于 2012-09-24T09:00:17.847 に答える