0

そのため、アラームが鳴ったことをユーザーに通知する最善の方法を見つけようとして、うさぎの穴に落ちたようです。

基本的に、ある種の通知/ダイアログが特定の時間に表示されるようにしたいのですが、ユーザーが何をしていても表示され、アクションが実行されるまで (却下されるか、またはその他の方法で) さらなる使用をブロックする必要があります。

現在、AlarmManager があり、それに登録されている BroadcastReceiver が新しいサービスを開始します。

自分が正しい方向に進んでいると思うたびに、オンラインで誰かが同様の問題を抱えているという問題にぶつかり、「そのようにしないでください」と言われました。(たとえば、サービスに AlertDialog を作成/表示させる。)

私は誰かが彼らの推薦が何であるかの簡単なリストを私に与えてくれることを望んでいました. コードは必要ありません (少なくとも必要ありません)。高レベルの抽象化だけです。

4

3 に答える 3

0

デフォルトのアラームと同じように、おそらく音を鳴らして、ユーザーの注意を通知に引き付ける通知を使用します。

そして、通知を継続的なものにします。通知の状態を変更するためのアクションが実行されるまで、ユーザーが削除することはできません。

Android:「進行中」の通知を作成する方法は?

この状況でのダイアログは、私にとっては面倒です。ドキュメントは、これらのシナリオではそれらを使用しないことも提案しています。

于 2013-06-12T05:53:15.337 に答える
0

私はこの方法でそれを行いましたが、私にとってはうまくいきました。

クラスを作成し、それをScheduledServiceのように呼び出してIntentServiceを拡張します。このクラスでは、アラームが鳴ったときにやりたいことを行います。

public class ScheduledService extends IntentService {

public ScheduledService() {
    super("My service");
}

@Override
protected void onHandleIntent(Intent intent) {
    //Do something, fire a notification or whatever you want to do here
    Log.d("debug", "Ring Rind !");

}
}

次に、アクティビティでアラームを開始するには、次を使用します。

AlarmManager mgr = (AlarmManager) YourActivity.getSystemService(Context.ALARM_SERVICE);
Intent i = new Intent(YourActivity, ScheduledService.class);
PendingIntent pi = PendingIntent.getService(YourActivity, 0, i, 0);
mgr.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime() + PERIOD, pi);

アラームを鳴らしたいミリ秒後の期間。

タイマーを停止してアラームをキャンセルするには、次のコマンドを使用します。

if (mgr != null)
        mgr.cancel(pi);

最後に、これらすべてを機能させるには、 ScheduledServiceクラスをサービスとして登録する必要があります。マニフェストで、これをアプリケーションに追加します。

<application
    ... />
    ...
    <service android:name=".ScheduledService" >
    </service>

</application>

このようにして、時間になると Android OS がアラームを鳴らします。他のアプリケーションが実行されていても、アプリのプロセスが終了していても。

この助けを願っています。よろしく。

クレイジーなアイデア:アクティビティを作成し、テーマをフルスクリーンに設定します。タイトル バーとアラームを停止するボタンはありません。通知を行う代わりに、そのアクティビティを開始するインテントを作成するだけです。電話がロックされていて迷惑な音が鳴っているときでも、アクティビティの開始時に「これ」が役立つ場合があります。onBackPressed()をオーバーライドして何もしないようにすることもできます。

于 2013-06-12T06:13:30.947 に答える