編集マニフェストにこの行を追加すると、問題が解決しました(Service
よく作成されています)。
<service android:name=".TimersService" >
役職
現在、カウントダウンが終了したことをユーザーに通知するアラームを実装しようとしています。createAlarm()
を介して新しいアラームを追加するメソッドがありAlarmManager
ます。このメソッドは現在、フラグメント内で呼び出されています。次のようになります。
private final void createAlarm(String name, long milliInFuture) {
Intent myIntent = new Intent(getActivity().getApplication(),
TimersService.class);
AlarmManager alarmManager = (AlarmManager) getActivity()
.getSystemService(Context.ALARM_SERVICE);
PendingIntent pendingIntent = PendingIntent.getService(getActivity()
.getApplication(), 0, myIntent, PendingIntent.FLAG_CANCEL_CURRENT);
alarmManager.set(AlarmManager.RTC_WAKEUP,
milliInFuture, pendingIntent);
}
このメソッドがアラームを追加することを期待しています。デバイスがスリープ モードの場合でも、Alarm を呼び出す必要があります。ある時点で呼び出す必要がありますmilliInFuture
(これはSystem.currentTimeMillis()
+ ある時点です)。アラームが鳴ったら、サービスを開始する必要があります。本サービスは以下のとおりです。これService
でできることは 1 つだけです。アラームが終了したことをユーザーに通知することです。私Service
のクラスは次のとおりです。
public class TimersService extends Service {
private NotificationManager mNM;
private int NOTIFICATION = 3456;
public class LocalBinder extends Binder {
TimersService getService() {
return TimersService.this;
}
}
@Override
public void onCreate() {
mNM = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
showNotification();
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.i("LocalService", "Received start id " + startId + ": " + intent);
return START_NOT_STICKY;
}
@Override
public void onDestroy() {
mNM.cancel(NOTIFICATION);
Toast.makeText(this, "Alarm", Toast.LENGTH_SHORT).show();
}
@Override
public IBinder onBind(Intent intent) {
return mBinder;
}
private final IBinder mBinder = new LocalBinder();
private void showNotification() {
final NotificationCompat.Builder builder = new NotificationCompat.Builder(getBaseContext());
builder.setSmallIcon(R.drawable.clock_alarm);
builder.setContentTitle("Time is up");
builder.setContentText("SLIMS");
builder.setVibrate(new long[] { 0, 200, 100, 200 });
final Notification notification = builder.build();
mNM.notify(NOTIFICATION, notification);
NOTIFICATION += 1;
}
}
コードを実行すると、メソッド createAlarm が呼び出されます。しかし、私のサービスは作成されません。このコードは、Alexander の Fragotsis のものに基づいて作成しました。そして、私のService
クラスはService クラスの Android リファレンスから着想を得ています。
なぜ私Service
が呼び出されていないのですか?Manifest
アラーム、サービス、または通知についてマイに書くべきことはありますか?
ご協力ありがとうございました
Ho と私は、私のコードに関する提案をいただければ幸いです。一定時間後にユーザーに通知する簡単な方法を知っている場合は、お知らせください。