Trong ứng dụng của tôi, tôi có hoạt động và dịch vụ ... Dịch vụ sẽ phát tin nhắn được thu thập từ dữ liệu từ GPS ... Hoạt động sẽ nhận được tin nhắn quảng bá và cập nhật giao diện người dùng ...Cách nhận dữ liệu từ dịch vụ đến hoạt động
mã của tôi
public class LocationPollerDemo extends Activity {
private static final int PERIOD = 10000; // 30 minutes
private PendingIntent pi = null;
private AlarmManager mgr = null;
private double lati;
private double longi;
private ServiceReceiver serviceReceiver;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mgr = (AlarmManager) getSystemService(ALARM_SERVICE);
Intent i = new Intent(this, LocationPoller.class);
i.putExtra(LocationPoller.EXTRA_INTENT, new Intent(this, ServiceReceiver.class));
i.putExtra(LocationPoller.EXTRA_PROVIDER, LocationManager.GPS_PROVIDER);
pi = PendingIntent.getBroadcast(this, 0, i, 0);
mgr.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime(), PERIOD, pi);
DebugLog.logTrace("On Create Demo");
Toast.makeText(this, "Location polling every 30 minutes begun", Toast.LENGTH_LONG).show();
serviceReceiver = new ServiceReceiver();
IntentFilter filter = new IntentFilter("me");
this.registerReceiver(serviceReceiver, filter);
}
class ServiceReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
File log = new File(Environment.getExternalStorageDirectory(), "Location2.txt");
DebugLog.logTrace(Environment.getExternalStorageDirectory().getAbsolutePath());
try {
BufferedWriter out = new BufferedWriter(new FileWriter(log.getAbsolutePath(), log.exists()));
out.write(new Date().toString());
out.write(" : ");
Bundle b = intent.getExtras();
Location loc = (Location) b.get(LocationPoller.EXTRA_LOCATION);
String msg;
if (loc == null) {
loc = (Location) b.get(LocationPoller.EXTRA_LASTKNOWN);
if (loc == null) {
msg = intent.getStringExtra(LocationPoller.EXTRA_ERROR);
} else {
msg = "TIMEOUT, lastKnown=" + loc.toString();
}
} else {
msg = loc.toString();
}
if (msg == null) {
msg = "Invalid broadcast received!";
}
out.write(msg);
out.write("\n");
out.close();
} catch (IOException e) {
Log.e(getClass().getName(), "Exception appending to log file", e);
DebugLog.logException(e);
}
}
}
}
Khi tôi sử dụng mã này nó không hoạt động đúng ... tôi đang sử dụng ServiceReceiver lớp trong tập tin riêng biệt hoạt động tốt .... xin vui lòng cho tôi biết ... !!
và không bao giờ quên unregister reciever bên onPause –
@FaisalNaseer Làm cách nào để hủy đăng ký, bạn có thể cung cấp một số mã mẫu, vui lòng –
Chỉ cần 'unregisterReceiver (mMessageReceiver);' –