2017-09-14 3 views
0

目標:私は履歴書を実行するたびに、私はの座標をGPSを使って、新しい場所を見たい
表示が再開フェーズで毎回GPS座標

問題:画像に基づいて
、それは動作しませんし、また、「GPSステータスが一時的に使用不可に変更されました」を取得します。 私は何が欠けていますか?

ありがとうございました!

情報:私はAPI 23

enter image description here


アンドロイドのmanifest.xmlを使用しています*私は
アンドロイド で新たなんだ*

<application android:icon="@mipmap/ic_launcher" android:label="@string/app_name"> 
    <activity android:name=".SimpleGPSTestActivity" 
     android:label="@string/app_name"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 

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


SimpleGPSTestActivity.cs

package com.jfdimarzio.test3; 

import android.Manifest; 
import android.app.Activity; 
import android.content.Context; 
import android.content.pm.PackageManager; 
import android.location.Location; 
import android.location.LocationListener; 
import android.location.LocationManager; 
import android.location.LocationProvider; 
import android.os.Bundle; 
import android.support.v4.app.ActivityCompat; 
import android.text.format.Time; 
import android.widget.TextView; 

import java.text.DecimalFormat; 



public class SimpleGPSTestActivity extends Activity { 
    private TextView texten = null; 
    private LocationManager location_manager; 
    private LocationListener location_listener; 

    private void print(String text) { 
     Time now = new Time(); 
     now.setToNow(); 
     String timeString = now.format("%H:%M:%S"); 
     String line = timeString + ": " + text + "\n"; 
     texten.setText(texten.getText() + line); 
     texten.invalidate(); 
     texten.postInvalidate(); 
    } 

    DecimalFormat dec = new DecimalFormat("0.0000"); 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     texten = new TextView(this); 
     texten.setText(""); 
     setContentView(texten); 

     print("onCreate"); 


     /* 
     ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, 1); 


     // Register the listener with the Location Manager to receive 
     // location updates 
     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; 
     } 
*/ 

     location_manager = 
       (LocationManager) this.getSystemService(Context.LOCATION_SERVICE); 

     location_listener = new LocationListener() { 
      @Override 
      public void onLocationChanged(Location location) { 
       double longitude = location.getLongitude(); 
       double latitude = location.getLatitude(); 
       double accuracy = location.getAccuracy(); 
       double altitude = location.getAltitude(); 
       print("New location: Long " + dec.format(longitude) + 
         ", lat " + dec.format(latitude) + 
         ", accuracy " + dec.format(accuracy) + 
         ", alt " + dec.format(altitude)); 
      } 

      @Override 
      public void onProviderDisabled(String provider) { 
       print("Location provider has been disabled."); 
      } 

      @Override 
      public void onProviderEnabled(String provider) { 
       print("Good news! Location provider has been enabled."); 
      } 

      @Override 
      public void onStatusChanged(String provider, int status, 
             Bundle extras) { 
       if (status == LocationProvider.OUT_OF_SERVICE) 
        print("GPS status changed to OUT_OF_SERVICE."); 
       else if (status == LocationProvider.TEMPORARILY_UNAVAILABLE) 
        print("GPS status changed to TEMPORARILY_UNAVAILABLE."); 
       else if (status == LocationProvider.AVAILABLE) 
        print("Good news! GPS status changed to AVAILABLE."); 
      } 
     }; 
    } 

    @Override 
    protected void onPause() { 
     super.onPause(); 
     print("onPause"); 
     location_manager.removeUpdates(location_listener); 
    } 

    @Override 
    protected void onResume() { 
     super.onResume(); 
     print("onResume"); 
     try { 


      ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, 1); 


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

      location_manager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, location_listener); 
     } 
     catch (Exception e) 
     { 
      print("Couldn't use the GPS: " + e + ", " + e.getMessage()); 
     } 
    } 


    public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) 
    { 
     switch (requestCode) { 
      case 1: { 
       // If request is cancelled, the result arrays are empty. 
       if (grantResults.length > 0 
         && grantResults[0] == PackageManager.PERMISSION_GRANTED) { 

       } else { 
        // permission denied, boo! Disable the 
        // functionality that depends on this permission. 
       } 
       return; 
      } 
      // other 'case' lines to check for other 
      // permissions this app might request 
     } 
    } 





} 

答えて

0

はあなたに戻るために場所を得るためにLocationManager十分な時間を与えていません。空をはっきりと見て、GPS warmed up(ほとんどの場合)で、場所の更新を取得するには約5-10秒かかります。他の状況では、あなたが地下にいる場合や、GPSがない場合は、決して長い時間がかかります。このすべての見た目から、すぐにアクティビティを終了してから開始し、更新を停止するように見えます。

+0

ありがとうございました! –