2016-03-30 13 views
0

Ich versuche, einige grundlegende Programmierung mit Android Studio zu lernen, aber so weit ich bin stecken, weil ich nicht in der Lage bin Arbeit auch Code-Beispiele machen die ich im Internet gefunden habe . Ich versuche den aktuellen GPS-Standort zu ermitteln und benutze ihn dann, um den Namen der Stadt zu erhalten. Im ersten Teil (siehe buttonabc und zugehöriges onclicklistener) habe ich versucht, nur die GPS-Position zu bekommen. Es schien am Anfang zu funktionieren, aber nachdem ich einige Änderungen am Code vorgenommen hatte, hörte es auf zu arbeiten und jetzt kann ich es nicht mehr funktionieren lassen, selbst wenn ich den Originalcode zurückkopiere. Ich bekomme immer für Längen- und Breitengrade 0 und 0 Werte. Ich habe versucht, verschiedene GPS-Koordinaten über Android Gerätemanager zu senden, aber nichts hat sich geändert. Im zweiten Teil (siehe Button namens button und damit verbundenes onclicklistener) habe ich versucht, anderen Code zu arbeiten, der den Namen der Stadt zurückgeben sollte. Das Ergebnis ist, dass ich nicht einmal Toast bekomme, um irgendeine Nachricht zu zeigen. Ich habe diese Berechtigungen in Android-Manifest: ACCESS_FINE_LOCATION, INTERNET und ACCESS_COARSE_LOCATION.Android Studio - get Stadt von GPS-Positionsfehler

Ich bekomme auch einige Fehler beim Starten der Anwendung, die ich nicht genau weiß, was sie bedeuten sollen. Einige Beispiele:

03-30 12:20:38.100 2968-2981/? W/EGL_emulation: eglSurfaceAttrib not implemented 
03-30 12:20:38.100 2968-2981/? W/OpenGLRenderer: Failed to set EGL_SWAP_BEHAVIOR on surface 0xabeeb340, error=EGL_SUCCESS 
03-30 12:20:41.340 2968-2981/? E/Surface: getSlotFromBufferLocked: unknown buffer: 0xb4096600 
03-30 12:21:04.941 1301-1317/? E/BluetoothAdapter: Bluetooth binder is null 
03-30 12:21:04.951 1301-1317/? E/KernelCpuSpeedReader: Failed to read cpu-freq 
                 java.io.FileNotFoundException: /sys/devices/system/cpu/cpu0/cpufreq/stats/time_in_state: open failed: ENOENT (No such file or directory) 
                  at libcore.io.IoBridge.open(IoBridge.java:452) 
                  at java.io.FileInputStream.<init>(FileInputStream.java:76) 
                  at java.io.FileInputStream.<init>(FileInputStream.java:103) 
                  at java.io.FileReader.<init>(FileReader.java:66) 
                  at com.android.internal.os.KernelCpuSpeedReader.readDelta(KernelCpuSpeedReader.java:49) 
                  at com.android.internal.os.BatteryStatsImpl.updateCpuTimeLocked(BatteryStatsImpl.java:8002) 
                  at com.android.server.am.BatteryStatsService.updateExternalStats(BatteryStatsService.java:1366) 
                  at com.android.server.am.BatteryStatsService$BatteryStatsHandler.handleMessage(BatteryStatsService.java:125) 
                  at android.os.Handler.dispatchMessage(Handler.java:102) 
                  at android.os.Looper.loop(Looper.java:148) 
                  at android.os.HandlerThread.run(HandlerThread.java:61) 
                  at com.android.server.ServiceThread.run(ServiceThread.java:46) 
                 Caused by: android.system.ErrnoException: open failed: ENOENT (No such file or directory) 
                  at libcore.io.Posix.open(Native Method) 
                  at libcore.io.BlockGuardOs.open(BlockGuardOs.java:186) 
                  at libcore.io.IoBridge.open(IoBridge.java:438) 
                  at java.io.FileInputStream.<init>(FileInputStream.java:76)  
                  at java.io.FileInputStream.<init>(FileInputStream.java:103)  
                  at java.io.FileReader.<init>(FileReader.java:66)  
                  at com.android.internal.os.KernelCpuSpeedReader.readDelta(KernelCpuSpeedReader.java:49)  
                  at com.android.internal.os.BatteryStatsImpl.updateCpuTimeLocked(BatteryStatsImpl.java:8002)  
                  at com.android.server.am.BatteryStatsService.updateExternalStats(BatteryStatsService.java:1366)  
                  at com.android.server.am.BatteryStatsService$BatteryStatsHandler.handleMessage(BatteryStatsService.java:125)  
                  at android.os.Handler.dispatchMessage(Handler.java:102)  
                  at android.os.Looper.loop(Looper.java:148)  
                  at android.os.HandlerThread.run(HandlerThread.java:61)  
                  at com.android.server.ServiceThread.run(ServiceThread.java:46)  
03-30 12:21:04.952 1301-1317/? E/KernelUidCpuTimeReader: Failed to read uid_cputime 
                 java.io.FileNotFoundException: /proc/uid_cputime/show_uid_stat: open failed: ENOENT (No such file or directory) 
                  at libcore.io.IoBridge.open(IoBridge.java:452) 
                  at java.io.FileInputStream.<init>(FileInputStream.java:76) 
                  at java.io.FileInputStream.<init>(FileInputStream.java:103) 
                  at java.io.FileReader.<init>(FileReader.java:66) 
                  at com.android.internal.os.KernelUidCpuTimeReader.readDelta(KernelUidCpuTimeReader.java:71) 
                  at com.android.internal.os.BatteryStatsImpl.updateCpuTimeLocked(BatteryStatsImpl.java:8031) 
                  at com.android.server.am.BatteryStatsService.updateExternalStats(BatteryStatsService.java:1366) 
                  at com.android.server.am.BatteryStatsService$BatteryStatsHandler.handleMessage(BatteryStatsService.java:125) 
                  at android.os.Handler.dispatchMessage(Handler.java:102) 
                  at android.os.Looper.loop(Looper.java:148) 
                  at android.os.HandlerThread.run(HandlerThread.java:61) 
                  at com.android.server.ServiceThread.run(ServiceThread.java:46) 
                  Caused by: android.system.ErrnoException: open failed: ENOENT (No such file or directory) 
                  at libcore.io.Posix.open(Native Method) 
                  at libcore.io.BlockGuardOs.open(BlockGuardOs.java:186) 
                  at libcore.io.IoBridge.open(IoBridge.java:438) 
                  at java.io.FileInputStream.<init>(FileInputStream.java:76)  
                  at java.io.FileInputStream.<init>(FileInputStream.java:103)  
                  at java.io.FileReader.<init>(FileReader.java:66)  
                  at com.android.internal.os.KernelUidCpuTimeReader.readDelta(KernelUidCpuTimeReader.java:71)  
                  at com.android.internal.os.BatteryStatsImpl.updateCpuTimeLocked(BatteryStatsImpl.java:8031)  
                  at com.android.server.am.BatteryStatsService.updateExternalStats(BatteryStatsService.java:1366)  
                  at com.android.server.am.BatteryStatsService$BatteryStatsHandler.handleMessage(BatteryStatsService.java:125)  
                  at android.os.Handler.dispatchMessage(Handler.java:102)  
                  at android.os.Looper.loop(Looper.java:148)  
                  at android.os.HandlerThread.run(HandlerThread.java:61)  
                  at com.android.server.ServiceThread.run(ServiceThread.java:46)  
01-01 00:00:00.000 0-0/? E/Internal: device 'emulator-5554' not found 

Ich habe versucht, einige dieser Fehler aber Lösung wie „Deaktivieren Sie die Option Verwendung Host GPU Option“ to google führte gerade nicht in der Lage zu sein Projekt überhaupt zu laufen.

import android.Manifest; 
import android.content.Context; 
import android.content.pm.PackageManager; 
import android.location.Address; 
import android.location.Criteria; 
import android.location.Geocoder; 
import android.location.Location; 
import android.location.LocationManager; 
import android.os.Bundle; 
import android.support.v4.app.ActivityCompat; 
import android.support.v7.app.ActionBarActivity; 
import android.view.View; 
import android.widget.Button; 
import android.widget.Toast; 

import java.io.IOException; 
import java.util.List; 
import java.util.Locale; 


public class MainActivity extends ActionBarActivity { 

    Button btnShowLocation; 

    GPSTracker gps; 
    String test = ""; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 


     btnShowLocation = (Button) findViewById(R.id.buttonabc); 

     btnShowLocation.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       gps = new GPSTracker(MainActivity.this); 

       if (gps.canGetLocation()) { 
        double latitude = gps.getLatitude(); 
        double longitude = gps.getLongitude(); 

        Toast.makeText(
          getApplicationContext(), 
          "Your Location is aaa -\nLat: " + latitude + "\nLong: " 
            + longitude + pokus, Toast.LENGTH_LONG).show(); 
       } else { 
        gps.showSettingsAlert(); 
       } 
      } 
     }); 

     LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 
     String provider = locationManager.getBestProvider(new Criteria(), true); 

     if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { 
      return; 
     } 
     Location locations = locationManager.getLastKnownLocation(provider); 
     List<String> providerList = locationManager.getAllProviders(); 
     if(null!=locations && null!=providerList && providerList.size()>0){ 
      double longitude = locations.getLongitude(); 
      double latitude = locations.getLatitude(); 
      Geocoder geocoder = new Geocoder(getApplicationContext(), Locale.getDefault()); 
      try { 
       List<Address> listAddresses = geocoder.getFromLocation(latitude, longitude, 1); 
       if(null!=listAddresses&&listAddresses.size()>0){ 
        pokus = listAddresses.get(0).getAddressLine(0); 
       } 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 



     Button button = (Button) findViewById(R.id.button); 

     button.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 


        Toast.makeText(
          getApplicationContext(), 
          "bbb" + test, Toast.LENGTH_LONG).show(); 
       } 
      }); 

     } 
    } 
} 





import android.Manifest; 
import android.app.AlertDialog; 
import android.app.Service; 
import android.content.Context; 
import android.content.DialogInterface; 
import android.content.Intent; 
import android.content.pm.PackageManager; 
import android.location.Location; 
import android.location.LocationListener; 
import android.location.LocationManager; 
import android.os.Bundle; 
import android.os.IBinder; 
import android.provider.Settings; 
import android.support.v4.app.ActivityCompat; 
import android.util.Log; 

public class GPSTracker extends Service implements LocationListener { 

    private final Context context; 

    boolean isGPSEnabled = false; 
    boolean isNetworkEnabled = false; 
    boolean canGetLocation = false; 

    Location location; 

    double latitude; 
    double longitude; 

    private static final long MIN_DISTANCE_CHANGE_FOR_UPDATES = 10; 
    private static final long MIN_TIME_BW_UPDATES = 1000 * 60 * 1; 

    protected LocationManager locationManager; 

    public GPSTracker(Context context) { 
     this.context = context; 
     getLocation(); 
    } 

    public Location getLocation() { 
     try { 
      locationManager = (LocationManager) context.getSystemService(LOCATION_SERVICE); 

      isGPSEnabled = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER); 

      isNetworkEnabled = locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER); 

      if (!isGPSEnabled && !isNetworkEnabled) { 

      } else { 
       this.canGetLocation = true; 

       if (isNetworkEnabled) { 

        if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { 
         return null; 
        } 
        locationManager.requestLocationUpdates(
          LocationManager.NETWORK_PROVIDER, 
          MIN_TIME_BW_UPDATES, 
          MIN_DISTANCE_CHANGE_FOR_UPDATES, this); 

        if (locationManager != null) { 
         location = locationManager 
           .getLastKnownLocation(LocationManager.NETWORK_PROVIDER); 

         if (location != null) { 

          latitude = location.getLatitude(); 
          longitude = location.getLongitude(); 
         } 
        } 

       } 

       if (isGPSEnabled) { 
        if (location == null) { 
         locationManager.requestLocationUpdates(
           LocationManager.GPS_PROVIDER, 
           MIN_TIME_BW_UPDATES, 
           MIN_DISTANCE_CHANGE_FOR_UPDATES, this); 

         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; 
    } 


    public void stopUsingGPS() { 
     if (locationManager != null) { 
      if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { 
       return; 
      } 
      locationManager.removeUpdates(GPSTracker.this); 
     } 
    } 

    public double getLatitude() { 
     if(location != null) { 
      latitude = location.getLatitude(); 
     } 
     return latitude; 
    } 

    public double getLongitude() { 
     if(location != null) { 
      longitude = location.getLongitude(); 
     } 

     return longitude; 
    } 

    public boolean canGetLocation() { 
     return this.canGetLocation; 
    } 

    public void showSettingsAlert() { 
     AlertDialog.Builder alertDialog = new AlertDialog.Builder(context); 

     alertDialog.setTitle("GPS is settings"); 

     alertDialog.setMessage("GPS is not enabled. Do you want to go to settings menu?"); 

     alertDialog.setPositiveButton("Settings", new DialogInterface.OnClickListener() { 

      @Override 
      public void onClick(DialogInterface dialog, int which) { 
       Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS); 
       context.startActivity(intent); 
      } 
     }); 

     alertDialog.setNegativeButton("Cancel", new DialogInterface.OnClickListener() { 

      @Override 
      public void onClick(DialogInterface dialog, int which) { 
       dialog.cancel(); 
      } 
     }); 

     alertDialog.show(); 
    } 

    @Override 
    public void onLocationChanged(Location arg0) { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public void onProviderDisabled(String arg0) { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public void onProviderEnabled(String arg0) { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public void onStatusChanged(String arg0, int arg1, Bundle arg2) { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public IBinder onBind(Intent intent) { 
     // TODO Auto-generated method stub 
     return null; 
    } 

} 

Was mache ich falsch? Danke für jede Antwort.

Antwort

0

Dies ist nicht, wie Sie Benutzer-Standort erhalten sollen. Versuchen Sie wie this.