0

ライブスコアをチェックするアプリをやっています。それが最善の方法かどうかはわかりませんが、Timertask、Service、Activity を作成して通知します。

Timertask は、スコアが変化するかどうかを x 秒ごとにチェックし、変化した場合はサービスに通知します。サービスが通知されると、ユーザーに通知するアクティビティが呼び出されます。私の問題は、アクティビティを呼び出してサービスから通知に失敗したことです。

これが私のコードです(例として、スコアではなく変数 i.

   //import ...

public class MyService extends Service{

    Notif notif = new Notif();

    private static final String TAG = "MyService";

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

    @Override
    public void onCreate() {
        Toast.makeText(this, "Congrats! MyService Created", Toast.LENGTH_LONG).show();
        Log.d(TAG, "onCreate");
    }

    @Override
    public void onStart(Intent intent, int startId) {
        Toast.makeText(this, "My Service Started", Toast.LENGTH_LONG).show();
        Log.d(TAG, "onStart");
        Timer time = new Timer(); // Instantiate Timer Object
        final ScheduleTask st = new ScheduleTask(); // Instantiate SheduledTask class
        time.schedule(st, 0, 5000); // Create Repetitively task for every 1 secs
    }

    @Override
    public void onDestroy() {
        Toast.makeText(this, "MyService Stopped", Toast.LENGTH_LONG).show();
        Log.d(TAG, "onDestroy");
    }

    public void checkI(int i){
        if (i==3){
            notif.initializeUIElements();
        }
    }
}

タイマータスク

import ...

// Create a class extends with TimerTask
public class ScheduleTask extends TimerTask {
    MyService myService = new MyService();
    Notif notif = new Notif();
    int i = 0;
    // Add your task here
    public void run() {
        i++;
        System.out.println("affichage numero " + i );
        myService.checkI(i);
    }

    public int getI() {
        return i;
    }
}

通知

import ...

public class Notif extends Activity {

    private static final int NOTIFY_ME_ID = 1987;
    private NotificationManager mgr = null;
    ScheduleTask scheduleTask = new ScheduleTask();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mgr = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
    }

    void initializeUIElements() {
        Notification note = new Notification(R.drawable.ic_launcher,
                "Welcome to MyDoople.com", System.currentTimeMillis());
        PendingIntent i = PendingIntent.getActivity(this, 0, new Intent(
                this, MainActivity.class), Notification.FLAG_ONGOING_EVENT);

        note.setLatestEventInfo(this, "MyDoople.com", "An Android Portal for Development",
                i);
        // note.number = ++count;
        note.flags |= Notification.FLAG_ONGOING_EVENT;

        mgr.notify(NOTIFY_ME_ID, note);
    }
}
4

1 に答える 1

2

リソースが必要な場合、サービスはシステムによって終了される場合があります。あなたの要件では、AlarmManagerを使用して定期的に何かを行うのが最善です。

[1][2]などの参考文献があります。

于 2013-05-17T07:35:28.063 に答える