14

webservice から、日付と時刻の形式でデータを取得しています。これは、特定の日付に対して、スロットのセットを持っていることを意味します。次の図は、詳細な説明を示しています。ここに画像の説明を入力

ここでは、各日付にいくつかのタイミングを設定しています。ここで私が欲しいのは、特定の日時に通知を表示することです。データベースからの応答が、2012 年 7 月 12 日午前 11 時のような明日の日付で構成されている場合。その時に通知を表示する必要があります。

私は通知マネージャーと私が使用しているコードについていくつかの考えを持っています..

Main.java

      NotificationManager notificationManager = (NotificationManager)getSystemService(NOTIFICATION_SERVICE);
    Notification notification = new Notification(R.drawable.ic_action_search, "A New Message!", System.currentTimeMillis());

    Intent notificationIntent = new Intent(this, Main.class);
    PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0);

    notification.setLatestEventInfo(Main.this, notificationTitle, notificationMessage, pendingIntent);
    notificationManager.notify(10001, notification);

ただし、ここでは、アプリが閉じられたときにも通知を受け取る必要があります。だから、誰でもこれで私を助けてください。

4

2 に答える 2

17

(started) をアプリケーションに追加Serviceします。ユーザーがアプリを終了しても、サービスは引き続きバックグラウンドで実行されます。

さらに、電話のインテントをリッスンし、電話の起動時にサービスを開始できるようにする BroadcastReceiver を実装できます。

MyService.java

public class MyService extends Service {

@Override
public int onStartCommand(Intent intent, int flags, int startId){
    // START YOUR TASKS
return super.onStartCommand(intent, flags, startId);
}

@Override
public void onDestroy() {
    // STOP YOUR TASKS
super.onDestroy();
}

@Override
public IBinder onBind(Intent intent){
    return null;
}

BootReceiver.java

public class BootReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        if ("android.intent.action.BOOT_COMPLETED".equals(intent.getAction())) {
            Intent serviceIntent = new Intent("your.package.MyService");
            context.startService(serviceIntent);
            }
        }
    }
}

AndroidManifest.xml

//マニフェストタグ内

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />

// アプリケーション タグ内

<service android:name=".MyService">
    <intent-filter>
        <action android:name="your.package.MyService" />
    </intent-filter>
</service>

<receiver
    android:name=".BootReceiver"
    android:enabled="true"
    android:exported="true"
    android:label="BootReceiver">
    <intent-filter>
        <action android:name="android.intent.action.BOOT_COMPLETED" />
    </intent-filter>
</receiver>

アクティビティからサービスを開始する場合は、単に使用します

private boolean isMyServiceRunning() {
         ActivityManager manager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
         for (RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) {
             if (MyService.class.getName().equals(service.service.getClassName())) {
                 return true;
             }
         }
         return false;
     }

if (!isMyServiceRunning()){
     Intent serviceIntent = new Intent("your.package.MyService");
     context.startService(serviceIntent);
}
于 2012-12-06T11:15:47.990 に答える
6

データがサーバーから来る場合は、GCMを利用するのが良い方法かもしれません。この場合、サーバーはアプリケーションを起動/開始することができます。

あなたのケースで常に実行されているサービスを作成することは、くだらない解決策です。IMO のより良いアプローチは、AlarmManagerの使用です。アラーム マネージャーは、特定の時間にインテントを呼び出します。(電話が再起動した場合は、意図を再度登録する必要があることに注意してください)。

于 2012-12-06T13:11:44.183 に答える