2016-06-07 6 views
0

Ich versuche den Standort des Benutzers zu finden und den Wert in meiner Firebase-Datenbank zu aktualisieren. Aber der Standort scheint nicht aktualisiert zu werden. Ich kann den Fehler nicht identifizieren. Der Dienst wurde gestartet, aber der Standort scheint nicht aktualisiert zu werden.Standort Update im Service

Mein Service ist wie folgt:

public class MyLocation extends Service { 

Firebase rootRef,child_ref; 
LocationManager locationManager; 
LocationListener locationListener; 

public MyLocation() { 
    super(); 

} 

@Override 
public void onCreate() { 
    super.onCreate(); 
    rootRef = new Firebase(Constants.FIREBASE_URL); 
    child_ref = rootRef.child(rootRef.getAuth().getUid()); 

    locationManager = (LocationManager) getSystemService(LOCATION_SERVICE); 
    locationListener = new LocationListener() { 
     @Override 
     public void onLocationChanged(Location location) { 

      child_ref.setValue(location.getLatitude() + " : " + location.getLongitude()); 
      UserPojo userPojo=new UserPojo(location.getLatitude()+" : "+location.getLongitude()); 
      child_ref.child("location").setValue(userPojo); 
      Log.i("location",location.getLatitude()+" : "+location.getLongitude()); 

     } 

     @Override 
     public void onStatusChanged(String provider, int status, Bundle extras) { 

     } 

     @Override 
     public void onProviderEnabled(String provider) { 

     } 

     @Override 
     public void onProviderDisabled(String provider) { 

     } 
    }; 
    try { 
     locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 1000, 0, locationListener); 
    } 
    catch (SecurityException e) 
    { 
     e.printStackTrace(); 
    } 
} 

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

Meine POJO Klasse ist wie folgt:

public class UserPojo { 

String uname; 
String email; 
String location; 


public UserPojo() { 
} 

public UserPojo(String uname, String email) { 
    this.uname = uname; 
    this.email = email; 

} 

public UserPojo(String location) { 
    this.location = location; 
} 

public String getUname() { 
    return uname; 
} 

public String getEmail() { 
    return email; 
} 

public String getLocation() { 
    return location; 
} 
} 

Mein Service Aufruf Aktivität wie folgt:

public class MembersListActivityFragment extends Fragment { 
Intent intent; 

private AuthData auth; 

public MembersListActivityFragment() { 
} 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 

    View rootView= inflater.inflate(R.layout.fragment_members_list, container, false); 

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { 
     requestPermissions(new String[]{ 
       Manifest.permission.INTERNET,Manifest.permission.ACCESS_FINE_LOCATION,Manifest.permission.ACCESS_COARSE_LOCATION 
     },10); 
    } 
Firebase firebase=new Firebase(Constants.FIREBASE_URL); 
    auth=firebase.getAuth(); 

    Toast.makeText(getActivity(),auth.getUid(),Toast.LENGTH_LONG).show(); 




return rootView; 
} 


private boolean isMyServiceRunning(Class<?> serviceClass) { 
    ActivityManager manager = (ActivityManager)getActivity().getSystemService(Context.ACTIVITY_SERVICE); 
    for (ActivityManager.RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) { 
     if (serviceClass.getName().equals(service.service.getClassName())) { 

      return true; 
     } 
    } 
    return false; 
} 







@Override 
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { 
    super.onRequestPermissionsResult(requestCode, permissions, grantResults); 
    switch (requestCode){ 
     case 10:if(grantResults.length>0&&grantResults[0]== PackageManager.PERMISSION_GRANTED) 
     { 
      intent=new Intent(getActivity(),MyLocation.class); 
      getActivity().startService(intent); 

      boolean service_enabled= isMyServiceRunning(MyLocation.class); 
      Log.i("service ",service_enabled+""); 



     } 
    } 
} 



@Override 
public void onDestroy() { 
    super.onDestroy(); 
getActivity().stopService(intent); 
} 
} 

Mein Manifest-Datei ist wie folgt:

<?xml version="1.0" encoding="utf-8"?> 

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> 
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 
<uses-permission android:name="android.permission.INTERNET" /> 

<application 
    android:name=".Family" 
    android:allowBackup="true" 
    android:icon="@mipmap/ic_launcher" 
    android:label="@string/app_name" 
    android:supportsRtl="true" 
    android:theme="@style/AppTheme"> 
    <activity android:name=".SignUpActivity" /> 
    <activity android:name=".SignInAcivity"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
    <activity 
     android:name=".MembersListActivity" 
     android:label="@string/title_activity_members_list" 
     android:theme="@style/AppTheme.NoActionBar"></activity> 
    <service android:name=".MyLocation" android:enabled="true"></service> 
</application> 

</manifest> 

Antwort

0

Es scheint, dass Sie überhaupt keine Kontrollen, um zu sehen, ob Sie entweder GPS oder Netzwerk-Ort-Service zur Verfügung haben.

Stellen Sie außerdem sicher, dass Sie über die richtigen Berechtigungen im Manifest verfügen.

könnte dieses Tutorial helfen: http://www.androidhive.info/2012/07/android-gps-location-manager-tutorial/

+0

Ich habe bereits die erforderlichen Berechtigungen in der Manifest-Datei –

+0

„Tutorium“ wird nicht helfen hinzugefügt !!!! 'GPSTracker erweitert Service' und dann' gps = new GPSTracker (this); '** widerspricht den grundlegenden Android-Regeln ** (das heißt: ** nicht ** Instanz von Services, Activities, Applications-Klassen selbst erstellen mit einem neuen Operator) – Selvin

Verwandte Themen