0

我试图获取用户的当前位置,并在日志无法使用LocationListener的机器人工作室2.3

这里显示它在日志中显示当前位置我的主要活动的Java代码

import android.Manifest; 
import android.content.Context; 
import android.content.pm.PackageManager; 
import android.location.Location; 
import android.location.LocationListener; 
import android.location.LocationManager; 
import android.os.Build; 
import android.os.Bundle; 
import android.support.annotation.NonNull; 
import android.support.v4.app.ActivityCompat; 
import android.support.v4.content.ContextCompat; 
import android.support.v7.app.AppCompatActivity; 
import android.util.Log; 

public class MainActivity extends AppCompatActivity { 

LocationManager locationManager; 
LocationListener locationListener; 

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

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

    locationListener = new LocationListener() { 
     @Override 
     public void onLocationChanged(Location location) { 

      Log.i("Location",location.toString()); 
     } 

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

     } 

     @Override 
     public void onProviderEnabled(String provider) { 

     } 

     @Override 
     public void onProviderDisabled(String provider) { 

     } 
    }; 

    //If the device is running version older than Marshmallow 

    if(Build.VERSION.SDK_INT<23) 
    { 
     locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,0,0,locationListener); 
    } 

    else 
    { 
     //Checking if it has permission access 
     if(ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) 
     { 
      //ask for permission 

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


     } 
     else 
     { 
      //we have permission 

      locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,0,0,locationListener); 
     } 
    } 
} 

@Override 
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { 
    super.onRequestPermissionsResult(requestCode, permissions, grantResults); 

    if(ContextCompat.checkSelfPermission(this,Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) 
    { 
     locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,0,0,locationListener); 
    } 
} 

}

但我没有看到我日志中的销售标签,这里有相应的日志:

Here are My Logs

我是Android新手,因此我不太确定代码出错的位置。

+0

的方式,您正在使用的位置服务已经过时了。请检查:https://developer.android.com/training/location/receive-location-updates.html在哪里可以找到推荐的方式。实际的方法是通过您要求提供位置更新的Google Api客户端(或最后一个已知位置(如果可用))。希望能帮助到你。 –

+0

它实际上看起来像你的代码应该按原样工作。设备上设置的位置模式是什么? –

回答

0

起初,你需要移动LocationListeneronCreate()外:

public class MainActivity extends AppCompatActivity { 

LocationManager locationManager; 
LocationListener locationListener; 

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

    if(Build.VERSION.SDK_INT<23) 
    { 
     locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,0,0,locationListener); 
    } 

    else 
    { 
     //Checking if it has permission access 
     if(ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) 
     { 
      //ask for permission 

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


     } 
     else 
     { 
      //we have permission 

      locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,0,0,locationListener); 
     } 
    } 
} 


    locationListener = new LocationListener() { 
     @Override 
     public void onLocationChanged(Location location) { 

      Log.i("Location",location.toString()); 
     } 

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

     } 

     @Override 
     public void onProviderEnabled(String provider) { 

     } 

     @Override 
     public void onProviderDisabled(String provider) { 

     } 
    }; 

    ..... 
} 

然后,修改onRequestPermissionResult()如下:

@Override 
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { 
    super.onRequestPermissionsResult(requestCode, permissions, grantResults); 

    switch (requestCode) { 
     case 1: { 
      // If request is cancelled, the result arrays are empty. 
      if (grantResults.length > 0 
        && grantResults[0] == PackageManager.PERMISSION_GRANTED) { 
       locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,0,0,locationListener); 

      } else { 
       Toast.makeText(getApplicationContext(), "Please provide permission.", Toast.LENGTH_LONG).show(); 
      } 
      break; 
     } 
    } 
} 
+0

我应该在哪里将'LocationListener'移动到 – KHKR

+0

就在''onCreate'外''MainActivity'类里面' – tahsinRupam

+0

但我确实在onCreate之外声明了'LocatinonListener' – KHKR