致:java.lang.IllegalArgumentException:如果供应商=网供应商、java、lang、IllegalArgumentException

2023-09-05 00:32:13 作者:☆无心☆

试图找到我的设备的当前位置。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(供应商);
    }
 
Java 混淆工具 ProGuard 之初体验

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