试图找到我的设备的当前位置。code是在这里。
包com.example.location;
进口android.app.Activity;
进口android.content.Context;
进口android.location.Location;
进口android.location.LocationListener;
进口android.location.LocationManager;
进口android.os.Bundle;
进口android.widget.Toast;
公共类LocationActivity扩展活动
{
/ **第一次创建活动时调用。 * /
@覆盖
公共无效的onCreate(包savedInstanceState)
{
super.onCreate(savedInstanceState);
的setContentView(R.layout.main);
/ *使用LocationManager类获取GPS位置* /
LocationManager mlocManager =(LocationManager)this.getSystemService(Context.LOCATION_SERVICE);
LocationListener的mlocListener =新MyLocationListener();
mlocManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER,0,0,mlocListener);
}
/ *类我的位置监听* /
公共类MyLocationListener实现LocationListener的
{
@覆盖
公共无效onLocationChanged(位置LOC)
{
loc.getLatitude();
loc.getLongitude();
字符串文本=我目前的位置是:+
Latitud =+ loc.getLatitude()+
Longitud =+ loc.getLongitude();
Toast.makeText(getApplicationContext(),文本,Toast.LENGTH_SHORT).show();
}
@覆盖
公共无效onProviderDisabled(字符串提供商)
{
Toast.makeText(getApplicationContext(),全球定位系统已禁用,Toast.LENGTH_SHORT).show();
}
@覆盖
公共无效onProviderEnabled(字符串提供商)
{
Toast.makeText(getApplicationContext(),GPS功能的,Toast.LENGTH_SHORT).show();
}
@覆盖
公共无效onStatusChanged(字符串商,INT地位,捆绑演员)
{
}
}
}
和logcat的是
十二月七号至15号:42:49.294:E / AndroidRuntime(3322):致命异常:主要
12月7号至15号:42:49.294:E / AndroidRuntime(3322):java.lang.RuntimeException的:无法启动的活动ComponentInfo {com.example.location / com.example.location.LocationActivity}:java.lang.IllegalArgumentException:如果供应商=网
12月7号至15号:42:49.294:E / AndroidRuntime(3322):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1956)
12月7号至15号:42:49.294:E / AndroidRuntime(3322):在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981)
12月7号至15号:42:49.294:E / AndroidRuntime(3322):在android.app.ActivityThread.access $ 600(ActivityThread.java:123)
12月7号至15号:42:49.294:E / AndroidRuntime(3322):在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1147)
12月7号至15号:42:49.294:E / AndroidRuntime(3322):在android.os.Handler.dispatchMessage(Handler.java:99)
12月7号至15号:42:49.294:E / AndroidRuntime(3322):在android.os.Looper.loop(Looper.java:137)
12月7号至15号:42:49.294:E / AndroidRuntime(3322):在android.app.ActivityThread.main(ActivityThread.java:4424)
12月7号至15号:42:49.294:E / AndroidRuntime(3322):在java.lang.reflect.Method.invokeNative(本机方法)
12月7号至15号:42:49.294:E / AndroidRuntime(3322):在java.lang.reflect.Method.invoke(Method.java:511)
12月7号至15号:42:49.294:E / AndroidRuntime(3322):在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:784)
12月7号至15号:42:49.294:E / AndroidRuntime(3322):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
12月7号至15号:42:49.294:E / AndroidRuntime(3322):在dalvik.system.NativeStart.main(本机方法)
12月7号至15号:42:49.294:E / AndroidRuntime(3322):java.lang.IllegalArgumentException异常:产生的原因提供商=网
12月7号至15号:42:49.294:E / AndroidRuntime(3322):在android.os.Parcel.readException(Parcel.java:1331)
12月7号至15号:42:49.294:E / AndroidRuntime(3322):在android.os.Parcel.readException(Parcel.java:1281)
12月7号至15号:42:49.294:E / AndroidRuntime(3322):在android.location.ILocationManager $存根$ Proxy.requestLocationUpdates(ILocationManager.java:646)
12月7号至15号:42:49.294:E / AndroidRuntime(3322):在android.location.LocationManager._requestLocationUpdates(LocationManager.java:589)
12月7号至15号:42:49.294:E / AndroidRuntime(3322):在android.location.LocationManager.requestLocationUpdates(LocationManager.java:453)
12月7号至15号:42:49.294:E / AndroidRuntime(3322):在com.example.location.LocationActivity.onCreate(LocationActivity.java:26)
12月7号至15号:42:49.294:E / AndroidRuntime(3322):在android.app.Activity.performCreate(Activity.java:4465)
12月7号至15号:42:49.294:E / AndroidRuntime(3322):在android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
12月7号至15号:42:49.294:E / AndroidRuntime(3322):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1920)
12月7号至15号:42:49.294:E / AndroidRuntime(3322):11 ...更多
解决方案
您是否尝试过在真实的设备相同的code。我认为它应该工作的设备,网络服务提供者将导致对模拟器的问题。
编辑: - 基于@Felipe评论,多了一些设备可能不支持网络运营商。使用下面的方法来检查供应商实际上是启用。
/ *传递方面,以及供应商的名称,您可以通过LocationManager类*获得供应商名称/
公共布尔isProviderEnabled(上下文CTX,字符串提供商){
LocationManager经理=(LocationManager)ctx.getSystemService(Context.LOCATION_SERVICE);
返回manager.isProviderEnabled(供应商);
}
trying to find the current location of my device.code is here.
package com.example.location;
import android.app.Activity;
import android.content.Context;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.widget.Toast;
public class LocationActivity extends Activity
{
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
/* Use the LocationManager class to obtain GPS locations */
LocationManager mlocManager = (LocationManager)this.getSystemService(Context.LOCATION_SERVICE);
LocationListener mlocListener = new MyLocationListener();
mlocManager.requestLocationUpdates( LocationManager.NETWORK_PROVIDER, 0, 0, mlocListener);
}
/* Class My Location Listener */
public class MyLocationListener implements LocationListener
{
@Override
public void onLocationChanged(Location loc)
{
loc.getLatitude();
loc.getLongitude();
String Text = "My current location is: " +
"Latitud = " + loc.getLatitude() +
"Longitud = " + loc.getLongitude();
Toast.makeText( getApplicationContext(), Text, Toast.LENGTH_SHORT).show();
}
@Override
public void onProviderDisabled(String provider)
{
Toast.makeText( getApplicationContext(), "Gps Disabled", Toast.LENGTH_SHORT ).show();
}
@Override
public void onProviderEnabled(String provider)
{
Toast.makeText( getApplicationContext(), "Gps Enabled", Toast.LENGTH_SHORT).show();
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras)
{
}
}
}
and logcat is
07-15 12:42:49.294: E/AndroidRuntime(3322): FATAL EXCEPTION: main
07-15 12:42:49.294: E/AndroidRuntime(3322): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.location/com.example.location.LocationActivity}: java.lang.IllegalArgumentException: provider=network
07-15 12:42:49.294: E/AndroidRuntime(3322): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1956)
07-15 12:42:49.294: E/AndroidRuntime(3322): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981)
07-15 12:42:49.294: E/AndroidRuntime(3322): at android.app.ActivityThread.access$600(ActivityThread.java:123)
07-15 12:42:49.294: E/AndroidRuntime(3322): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147)
07-15 12:42:49.294: E/AndroidRuntime(3322): at android.os.Handler.dispatchMessage(Handler.java:99)
07-15 12:42:49.294: E/AndroidRuntime(3322): at android.os.Looper.loop(Looper.java:137)
07-15 12:42:49.294: E/AndroidRuntime(3322): at android.app.ActivityThread.main(ActivityThread.java:4424)
07-15 12:42:49.294: E/AndroidRuntime(3322): at java.lang.reflect.Method.invokeNative(Native Method)
07-15 12:42:49.294: E/AndroidRuntime(3322): at java.lang.reflect.Method.invoke(Method.java:511)
07-15 12:42:49.294: E/AndroidRuntime(3322): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
07-15 12:42:49.294: E/AndroidRuntime(3322): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
07-15 12:42:49.294: E/AndroidRuntime(3322): at dalvik.system.NativeStart.main(Native Method)
07-15 12:42:49.294: E/AndroidRuntime(3322): Caused by: java.lang.IllegalArgumentException: provider=network
07-15 12:42:49.294: E/AndroidRuntime(3322): at android.os.Parcel.readException(Parcel.java:1331)
07-15 12:42:49.294: E/AndroidRuntime(3322): at android.os.Parcel.readException(Parcel.java:1281)
07-15 12:42:49.294: E/AndroidRuntime(3322): at android.location.ILocationManager$Stub$Proxy.requestLocationUpdates(ILocationManager.java:646)
07-15 12:42:49.294: E/AndroidRuntime(3322): at android.location.LocationManager._requestLocationUpdates(LocationManager.java:589)
07-15 12:42:49.294: E/AndroidRuntime(3322): at android.location.LocationManager.requestLocationUpdates(LocationManager.java:453)
07-15 12:42:49.294: E/AndroidRuntime(3322): at com.example.location.LocationActivity.onCreate(LocationActivity.java:26)
07-15 12:42:49.294: E/AndroidRuntime(3322): at android.app.Activity.performCreate(Activity.java:4465)
07-15 12:42:49.294: E/AndroidRuntime(3322): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
07-15 12:42:49.294: E/AndroidRuntime(3322): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1920)
07-15 12:42:49.294: E/AndroidRuntime(3322): ... 11 more
解决方案
Have you tried the same code on Real Device. I think it should work on device, Network provider causes problem on Emulator.
Edit:- Based on @Felipe comment, Many some devices may not support network provider. Use below method to check if provider is actually enabled or not.
/*Pass context as well as Provider name, you can get provider name via LocationManager class*/
public boolean isProviderEnabled(Context ctx, String provider){
LocationManager manager = (LocationManager) ctx.getSystemService(Context.LOCATION_SERVICE);
return manager.isProviderEnabled(provider);
}