2013-05-17 38 views
0

我正在做一个应用程序来检查现场比分。我不知道这是否是最好的方法,但我创建了一个Timertask,一个Service和Activity来通知。每x秒发送一次通知

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(); 
     } 
    } 
} 

的TimerTask

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; 
    } 
} 

NOTIF

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); 
    } 
} 

回答

2

服务可能如果需要资源,则由系统终止。根据您的要求,最好将AlarmManager用于periodi cally做点什么。

这里有更多的参考资料:[1][2]

+0

感谢的我要了解这个 – user1965878