Ich mag mit dem aktuellen Standort des Benutzers in meinem Haupt-Fragmente Text von Textview setzen. Dieser Ort ist in einem Service mit FusedLocationApi enthalten. Der Dienst funktioniert und ich kann Standortaktualisierungen in Toastnachrichten sehen. Ich versuche, diesen Speicherort festzulegen, aber ich habe NullPointerEx erhalten. Nach dem Debugging habe ich gesehen, dass der Teil mit BroadcastReceiver nie aufgerufen wird. Unten habe ich den Code, den ich benutze.
MainFragment.javaAktualisieren von Textview-Fragmente aus BroadcastReceiver
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mIntent = new Intent(getContext(), MyService.class);
getActivity().startService(mIntent);
getActivity().registerReceiver(broadcastReceiver, new IntentFilter(MyService.BROADCAST_ACTION));
}
private BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
try {
updateUI(intent);
} catch (IOException e) {
e.printStackTrace();
}
}
};
private void updateUI(Intent intent) throws IOException {
latitudeString = intent.getStringExtra("latitude");
longitudeString = intent.getStringExtra("longitude");
myTime = intent.getStringExtra("time");
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
if (ActivityCompat.checkSelfPermission(getContext(), Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(getContext(), Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
return null;
}
View view = inflater.inflate(R.layout.fragment_main, null);
googleMap = ((SupportMapFragment) getChildFragmentManager().findFragmentById(R.id.map)).getMap();
saveAdress = (Button) view.findViewById(R.id.buttonSaveAdress);
getBack = (Button) view.findViewById(R.id.buttonGetBack);
latitude = Double.parseDouble(latitudeString); //Null pointer here from latitudeString
longitude = Double.parseDouble(longitudeString);
LatLng latLng = new LatLng(latitude, longitude);
googleMap.moveCamera(CameraUpdateFactory.newLatLng(latLng));
googleMap.animateCamera(CameraUpdateFactory.zoomTo(15));
googleMap.setMyLocationEnabled(true);
...}
Teil MyService.java (außer fusedLocationApi Code)
private static final String TAG2 = "MyService";
public static final String BROADCAST_ACTION = "package.where.is.myService.displayevent";
private final Handler handler = new Handler();
Intent intent;
@Override
public void onCreate() {
super.onCreate();
intent = new Intent(BROADCAST_ACTION);
handler.removeCallbacks(sendUpdatesToUI);
handler.postDelayed(sendUpdatesToUI, 1000); // 1 second
}
@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.d("LOC", "Service init...");
isEnded = false;
mRequestingLocationUpdates = false;
mLastUpdateTime = "";
buildGoogleApiClient();
if (mGoogleApiClient.isConnected() && mRequestingLocationUpdates) {
startLocationUpdates();
}
return Service.START_REDELIVER_INTENT;
}
@Override
public void onConnected(Bundle bundle) {
startLocationUpdates();
}
@Override
public void onDestroy() {
super.onDestroy();
stopLocationUpdates();
}
private Runnable sendUpdatesToUI = new Runnable() {
public void run() {
DisplayLoggingInfo();
handler.postDelayed(this, 5000); // 5 seconds
}
};
private void DisplayLoggingInfo() {
Log.d(TAG2, "entered DisplayLoggingInfo");
intent.putExtra("latitude", mCurrentLocation.getLatitude());
intent.putExtra("longitude",mCurrentLocation.getLongitude());
intent.putExtra("time", mCurrentLocation.getTime());
Log.d(TAG2, String.valueOf(mCurrentLocation.getLatitude()));
//intent.putExtra("counter", String.valueOf(++counter));
sendBroadcast(intent);
}
http: // Stackoverflow. com/questions/36525508/communication-zwischen-android-services-and-activities, überprüfen Sie meine Antwort –