2016-01-15 128 views
2

我做了一個每10秒觸發一次的服務。觸發時如何將服務連接到活動。示例我刷新我的本地數據庫,出現更新時活動發送Toast。Android從服務中獲取信息

AlarmService.class

@SuppressLint("SimpleDateFormat") 
public class AlarmService extends Service { 

    Handler mHandler; 
    private PendingIntent pendingIntent; 

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

    @Override 
    public void onCreate() { 
    } 

    public void f() { 
     Toast t = Toast.makeText(this, "Service is still running", 
       Toast.LENGTH_SHORT); 
     t.show(); 
    } 

    @Override 
    @Deprecated 
    public void onStart(Intent intent, int startId) { 
     Toast t = Toast.makeText(this, "Service started", Toast.LENGTH_SHORT); 
     t.show(); 

     // TODO Auto-generated method stub 
     super.onStart(intent, startId); 

     mHandler = new Handler(); 
     Runnable r = new Runnable() { 
      @Override 
      public void run() { 
       f(); 
       mHandler.postDelayed(this,10000); 
      } 
     }; 
     mHandler.postDelayed(r, 10000); 
    } 
} 

MainActivity.class

public class MainActivity extends AppCompatActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     Intent serviceIntent = new Intent(this,AlarmService.class); 
     startService(serviceIntent); 

    } 
} 
+0

你想達到什麼實際做? – pskink

+0

服務觸發活動 – Unknown

+0

閱讀有關「綁定服務」,本地綁定服務模式在大多數情況下是首選 – pskink

回答

0

使用廣播接收器製作方法設定報警

public void setAlarm(){ 
    f(); // call your method f() here 
    AlarmManager am=(AlarmManager)getSystemService(ALARM_SERVICE); 
    Intent alarmintent1 = new Intent(this, MyExtBroadcastReceiver.class); 
    PendingIntent sender1=PendingIntent.getBroadcast(this, 100, alarmintent1, PendingIntent.FLAG_UPDATE_CURRENT | Intent.FILL_IN_DATA); 
    try { 
     am.cancel(sender1); 
    } catch (Exception e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
     System.out.println("ex....."+e); 
    } 

    Calendar cal=Calendar.getInstance(); 
    cal.add(Calendar.Seconds,10); 
    am.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), 1000*10*60, sender1); 

調用此方法從OnCreate中()

@Override 
public void onCreate() { 
    setAlarm(); 

} 
} 
0

您可以使用LocalBroadcastManagerMessengerResultReceiver從業務數據發送到Activity

Here是一個使用ResultReceiver將更新數據從Service發送到Activity的示例。

這樣

public static class MyExtBroadcastReceiver extends BroadcastReceiver { 

    public MyExtBroadcastReceiver() { 
     super(); 
    } 

    @Override 
    public void onReceive(Context context, Intent intent) { 
    //Call your activity here  
    }