android 從 service 獲取資料 到 activity
阿新 • • 發佈:2019-01-29
package com.websmithing.broadcasttest; import java.util.Date; import android.app.Service; import android.content.Intent; import android.os.Handler; import android.os.IBinder; import android.util.Log; public class BroadcastService extends Service { private static final String TAG = "BroadcastService"; public static final String BROADCAST_ACTION = "com.websmithing.broadcasttest.displayevent"; private final Handler handler = new Handler(); Intent intent; int counter = 0; @Override public void onCreate() { super.onCreate(); intent = new Intent(BROADCAST_ACTION); } @Override public void onStart(Intent intent, int startId) { handler.removeCallbacks(sendUpdatesToUI); handler.postDelayed(sendUpdatesToUI, 1000); // 1 second } private Runnable sendUpdatesToUI = new Runnable() { public void run() { DisplayLoggingInfo(); handler.postDelayed(this, 10000); // 10 seconds } }; private void DisplayLoggingInfo() { Log.d(TAG, "entered DisplayLoggingInfo"); intent.putExtra("time", new Date().toLocaleString()); intent.putExtra("counter", String.valueOf(++counter)); sendBroadcast(intent); } @Override public IBinder onBind(Intent intent) { return null; } @Override public void onDestroy() { handler.removeCallbacks(sendUpdatesToUI); super.onDestroy(); } }
package com.websmithing.broadcasttest; import android.app.Activity; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.os.Bundle; import android.util.Log; import android.widget.TextView; public class BroadcastTest extends Activity { private static final String TAG = "BroadcastTest"; private Intent intent; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); intent = new Intent(this, BroadcastService.class); } private BroadcastReceiver broadcastReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { updateUI(intent); } }; @Override public void onResume() { super.onResume(); startService(intent); registerReceiver(broadcastReceiver, new IntentFilter(BroadcastService.BROADCAST_ACTION)); } @Override public void onPause() { super.onPause(); unregisterReceiver(broadcastReceiver); stopService(intent); } private void updateUI(Intent intent) { String counter = intent.getStringExtra("counter"); String time = intent.getStringExtra("time"); Log.d(TAG, counter); Log.d(TAG, time); TextView txtDateTime = (TextView) findViewById(R.id.txtDateTime); TextView txtCounter = (TextView) findViewById(R.id.txtCounter); txtDateTime.setText(time); txtCounter.setText(counter); } }
選自:https://www.websmithing.com/2011/02/01/how-to-update-the-ui-in-an-android-activity-using-data-from-a-background-service/comment-page-1/#comment-734