2017-06-09 2 views
0

hier ist mein Problem:Android: Kann Lage von WIFI auf Android TV bekommen

ich diesen Code haben (von diesem tuto):

public Location getLocation(Context act) { 
    try { 
     locationManager = (LocationManager) mContext 
       .getSystemService(LOCATION_SERVICE); 

     // getting GPS status 
     isGPSEnabled = locationManager 
       .isProviderEnabled(LocationManager.GPS_PROVIDER); 

     // getting network status 
     isNetworkEnabled = locationManager 
       .isProviderEnabled(LocationManager.NETWORK_PROVIDER); 

     if (!isGPSEnabled && !isNetworkEnabled) { 
      // no network provider is enabled 
     } else { 
      this.canGetLocation = true; 
      if (ContextCompat.checkSelfPermission(act, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) { 
        // First get location from Network Provider 
        if (isNetworkEnabled) { 
         locationManager.requestLocationUpdates(
           LocationManager.NETWORK_PROVIDER, 
           MIN_TIME_BW_UPDATES, 
           MIN_DISTANCE_CHANGE_FOR_UPDATES, this); 
         Log.d("Network", "Network"); 
         if (locationManager != null) { 
          location = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER); 
          if (location != null) { 
           latitude = location.getLatitude(); 
           longitude = location.getLongitude(); 
          } 
         } 
        } 
       // if GPS Enabled get lat/long using GPS Services 

       if (isGPSEnabled) { 
        if (location == null) { 
         locationManager.requestLocationUpdates(
           LocationManager.GPS_PROVIDER, 
           MIN_TIME_BW_UPDATES, 
           MIN_DISTANCE_CHANGE_FOR_UPDATES, this); 
         Log.d("GPS Enabled", "GPS Enabled"); 
         if (locationManager != null) { 
          location = locationManager 
            .getLastKnownLocation(LocationManager.GPS_PROVIDER); 
          if (location != null) { 
           latitude = location.getLatitude(); 
           longitude = location.getLongitude(); 
          } 
         } 
        } 
       } 
      } 
     } 

    } catch (Exception e) { 
     e.printStackTrace(); 
    } 

    return location; 
} 

Es gerade fein auf AVD und Telefon funktioniert, aber mit Android TV, es wird nicht funktionieren.

Meine Android TV ist auf „Wireless LAN verwenden Lage zu schätzen“ (und „ein“ natürlich) so dachte ich, dass selbst wenn es keine GPS_PROVIDER ist es zumindest auf NETWORK_PROVIDER gehen sollte, aber isNetworkEnabled = locationManager.isProviderEnabled (LocationManager.NETWORK_PROVIDER); ist immer falsch.

Ich gebe an, dass ich wifi auf meinem Fernseher habe und als ich google map in meinem Browser eintrug, fand es mich.

Kann jemand bitte helfen Sie mir zu verstehen, warum es nicht funktioniert oder eine andere Lösung vorschlagen, meine Lage zu bekommen (außer Google Play Service, mein Fernsehgerät nicht installiert ist) ...

EDIT

Mein Manifest:

<!-- lire dans la carte sd --> 
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 
<!-- écrire dans la carte sd --> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
<!--location --> 
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 
<!-- accès à internet --> 
<uses-permission android:name="android.permission.INTERNET" /> 
<!-- accès à l'état de la connection internet --> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
<!-- pour enlever le bouton recent app --> 
<uses-permission android:name="android.permission.REORDER_TASKS" /> 
<!-- pour l'AccountManager --> 
<uses-permission android:name="android.permission.AUTHENTICATE_ACCOUNTS"/> 
<!-- pareil je crois --> 
<uses-permission android:name="android.permission.GET_ACCOUNTS" /> 
<!-- Pour delete les accounts --> 
<uses-permission android:name="android.permission.MANAGE_ACCOUNTS" /> 

<uses-permission android:name="android.permission.BLUETOOTH" /> 

<uses-feature 
    android:name="android.hardware.touchscreen" 
    android:required="false" /> 
<uses-feature 
    android:name="android.software.leanback" 
    android:required="true" /> 
<uses-feature 
    android:name="android.hardware.faketouch" 
    android:required="false" /> 
<uses-feature 
    android:name="android.hardware.telephony" 
    android:required="false" /> 
<uses-feature 
    android:name="android.hardware.camera" 
    android:required="false" /> 
<uses-feature 
    android:name="android.hardware.nfc" 
    android:required="false" /> 
<uses-feature 
    android:name="android.hardware.location.gps" 
    android:required="false" /> 

<uses-feature android:name="android.hardware.location.network"/> 

<uses-feature 
    android:name="android.hardware.microphone" 
    android:required="false" /> 
<uses-feature 
    android:name="android.hardware.sensor" 
    android:required="false" /> 

<supports-screens 
    android:largeScreens="true" 
    android:normalScreens="false" 
    android:requiresSmallestWidthDp="720" 
    android:smallScreens="false" 
    android:xlargeScreens="true" /> 
+0

Was Zuhörers Benutzer erhalten, ist Ihr Android-Version? Wenn Marshmellow (6.x), hast du Runtime-Berechtigungen erhalten? – dustblue

+0

@dustblue Mein min SDK ist 21 und max 25, mein TV ist auf API 22, und ja, ich habe Laufzeit Erlaubnis – Kolopox

+0

@dustblue Ich legte mein Manifest in Frage, wenn Sie wollen – Kolopox

Antwort

0

mit diesem thread beziehen, wobei es, dass Sie nur in Sie diese Berechtigungen benötigen manifestieren:

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

Dann die Bedingung ersetzen zu überprüfen, ob Sie GPS aktiviert ist:

if (isGPSEnabled) { 
    if (location == null) { 
     locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, MIN_TIME_BW_UPDATES,MIN_DISTANCE_CHANGE_FOR_UPDATES, (LocationListener)this); 
     Log.d("GPS Enabled", "GPS Enabled"); 
     if (locationManager != null) { 
      location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER); 
      if (location != null) { 
       latitude = location.getLatitude(); 
       longitude = location.getLongitude(); 
      } 
     } 
    } 
} //end-if isGPSEnabled 

Weitere Referenzen:

hoffe, das hilft!

+0

Sorry für die späte Antwort, den Code, den Sie mir gaben ist derjenige, den ich bereits benutze, und ich habe bereits die Berechtigungen. Das Problem ist der Teil: ** Ein interner Status ist bereit für den Netzwerkstandort **, ich weiß nicht, ob mein Status bereit ist oder nicht:/und ich habe versucht, ** isNetworkEnabled = locationManager.isProviderEnabled (LocationManager. NETWORK_PROVIDER); ** zu True, aber wenn ich meinen Standort ist null ... – Kolopox

0

Sie können die API LocationServices in den Google Play-Diensten verwenden, um den Standort des Nutzers abzurufen.Es ist ein "FusedLocationProvider", der eine Vielzahl von Eingaben einschließlich Wi-Fi enthält, um den Standort eines Benutzers zu bestimmen.

Erstens: Fügen Sie die COARSE_LOCATION Erlaubnis:

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

Dann wird Ihr Objekt init:

FusedLocationProviderClient mFusedLocationClient = LocationServices.getFusedLocationProviderClient(this); 

Und die letzte Position durch eine

mFusedLocationClient.getLastLocation() 
    .addOnSuccessListener(this, new OnSuccessListener<Location>() { 
     @Override 
     public void onSuccess(Location location) { 
      // Got last known location. In some rare situations this can be null. 
      if (location != null) { 
       // ... 
      } 
     } 
    });