2016-04-21 2 views
-1

Das Problem, dem ich gegenüberstehe, ist die Erteilung von GPS-Berechtigungen für die Anwendung über den Dienst, den ich schreibe. Ich habe versucht, ein Beispiel zu finden, um dies zu erreichen, und Beispiele zeigen, einen gpslocation Finder in Activity schreiben, aber in diesem Fall möchte ich dies im Dienst implementieren.requestPermissions() für GPS innerhalb eines Dienstes. Fehler: "Der Standortanbieter benötigt die Berechtigung ACCESS_FINE_LOCATION."

Der Service-Code lautet wie folgt:

public class TravelService extends Service{ 

    private LocationManager locManager; 
    private LocationListener locListener; 


    @Override 
    public void onCreate() { 
     super.onCreate(); 
     locManager = (LocationManager) getSystemService(LOCATION_SERVICE); 
     locListener = new LocationListener() { 
      @Override 
      public void onLocationChanged(Location location) { 
       locManager.requestLocationUpdates("gps", 5000, 100, locListener); 

      } 

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

      } 

      @Override 
      public void onProviderEnabled(String provider) { 

      } 

      @Override 
      public void onProviderDisabled(String provider) { 

      } 
     }; 
     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { 
      if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { 

       // TODO: Consider calling 
       // ActivityCompat#requestPermissions 
       // here to request the missing permissions, and then overriding 
       // public void onRequestPermissionsResult(int requestCode, String[] permissions, 
       //           int[] grantResults) 
       // to handle the case where the user grants the permission. See the documentation 
       // for ActivityCompat#requestPermissions for more details. 
       return; 
      } 
      locManager.requestLocationUpdates("gps", 5000, 100, locListener); 

      Toast.makeText(this, "Service Created", Toast.LENGTH_LONG).show(); 
     } 
    } 
    @Override 
    public int onStartCommand(Intent intent, int flags, int startId) { 
     locManager.requestLocationUpdates("gps", 5000, 100, locListener); 

     Toast.makeText(this,"Service Started",Toast.LENGTH_LONG).show(); 
     return super.onStartCommand(intent, flags, startId); 
    } 

    @Override 
    public void onDestroy() { 
     super.onDestroy(); 
     Toast.makeText(this,"Service destroyed",Toast.LENGTH_LONG).show(); 
    } 

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

} 

Hier mein Code in der Manifest.xml ist:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.example.param.dateandtime"> 
    <uses-permission android:name="android.permission.INTERNET"/> 
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> 
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> 
    <application 
     android:allowBackup="true" 
     android:icon="@mipmap/ic_launcher" 
     android:label="@string/app_name" 
     android:supportsRtl="true" 
     android:theme="@style/AppTheme"> 
     <activity android:name=".MainActivity"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
     <!-- Entry for LoginActivity.class --> 
     <activity android:name=".LoginActivity" 
      android:label="@string/app_name"></activity> 
     <activity android:name=".Finish" 
      android:label="@string/app_name"></activity> 
     <service android:name=".TravelService" 
      android:exported="false"/> 
    </application> 

</manifest> 

Hier habe ich das Fehlerprotokoll angeschlossen haben, zeigt die Fehler, die ich mit Blick auf bin . Ich kann den Fehler als "Location Provider erfordert ACCESS_FINE_LOCATION Erlaubnis."

+1

Stack-Überlauf ist für die Programmierung von Fragen. Was ist deine Frage? – CommonsWare

+0

poste dein Manifest –

+0

Ich postete meinen manifest.xml Code –

Antwort

0

Sie können keine Berechtigungen vom Dienst anfordern, da ein Dienst nicht an eine Benutzeroberfläche gebunden ist. So tun es aus der Aktivität, wenn Sie startService().

ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION}, 1001); //Any number can be used 

Und implementieren onRequestPermissionsResult() Rückruf

@Override 
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { 
     super.onRequestPermissionsResult(requestCode, permissions, grantResults); 
     switch (requestCode) { 
      case 1001: { 
       if (grantResults.length > 0 
         && grantResults[0] == PackageManager.PERMISSION_GRANTED 
         && (ActivityCompat.checkSelfPermission(getActivity(), Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED 
         || ActivityCompat.checkSelfPermission(getActivity(), Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED)) { 
        //Start your service here 
       } 
      } 
     } 
    } 
+0

Ich überprüfe auf Berechtigungen onCreate() es selbst richtig. Also, durch den Dienst läuft es sollte Berechtigungen haben. Aber was ich will ist, wie man Berechtigungen in der onCreate() Methode in einem Service gibt. –

+0

Ich dachte, du weißt, wie man das macht, aber du hast diesen Code auskommentiert und gepostet. Die Antwort wurde aktualisiert. –

+0

Wenn ich ActivityCompat.requestPermissions() im Dienst verwende, erwartet es das erste Argument als eine Aktivität und zeigt folgenden Fehler: https://lh6.googleusercontent.com/-iV4t1YB_hZU/Vxpow_fqGxI/AAAAAAAAEQU/3Wzup0D-02o7ys00VopOYg4ov9v1SfsOwCL0B/w739- h229-no/error1.png –

Verwandte Themen