LocationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)总是为false

============问题描述============



package com.jt.classlibrary;



import java.util.List;



import android.app.Service;

import android.content.BroadcastReceiver;

import android.content.Context;

import android.content.Intent;

import android.content.IntentFilter;

import android.content.SharedPreferences;

import android.location.Location;

import android.location.LocationListener;

import android.location.LocationManager;

import android.os.AsyncTask;

import android.os.Binder;

import android.os.Bundle;

import android.os.IBinder;

import android.preference.PreferenceManager;

import android.provider.Settings.Secure;

import android.util.Log;



public class LocationService extends Service implements LocationListener 

{

	//private LocationAsyncTask asyncTask = null;

	//private Timer asyncTimer = null; 

	private LocationManager lm = null;

	//private Location loc = null;

	private int iAutoUpdateFrequency = 10000;

	private MyBroadcastReceiver broadcast = null;	

	private ServiceBinder binder = new ServiceBinder();	

			

	public class ServiceBinder extends Binder

	{		

		public LocationService getService()

		{

			return LocationService.this;

		}

	}



	@Override

	public void onCreate()

	{

	    // TODO Auto-generated method stub

		try

		{

			SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(this);

			iAutoUpdateFrequency = pref.getInt("AUTO_UPDATE_FREQUENCE", 10000);

		}

		catch(Exception ex)

		{

			Log.e("error", "Get SharedPreferences Failed---->" + ex.getMessage());

		}

		

		try

		{

			broadcast = new MyBroadcastReceiver();

			IntentFilter intentFilter = new IntentFilter();

			intentFilter.addAction(ConstDef.ACTION_REQUIRE_LOCATION);

			//intentFilter.addAction(ConstDef.ACTION_UPMYLOCATION);

			registerReceiver(broadcast, intentFilter);

		}

		catch(Exception ex)

		{

			Log.e("error", "Register Broadcast Failed---->" + ex.getMessage());

		}		

		

		try

		{			

			lm = (LocationManager)getSystemService(Context.LOCATION_SERVICE);

			/*try

			{

				if(!lm.isProviderEnabled(LocationManager.GPS_PROVIDER))

				{

					if(ConstDef.bOpenGPS)

					{

						//Secure.setLocationProviderEnabled(getContentResolver(), LocationManager.GPS_PROVIDER, true);

					}

				}

				

				if(!lm.isProviderEnabled(LocationManager.NETWORK_PROVIDER))

				{

					if(ConstDef.bOpenNET)

					{

						//Secure.setLocationProviderEnabled(getContentResolver(), LocationManager.NETWORK_PROVIDER, true);

					}

				}

			}

			catch(Exception ex)

			{

				Log.e("error", "Open GPS or NET Failed---->" + ex.getMessage());

			}	*/	

			

			/*List<String> providers = lm.getProviders(false);

			

			for(int i=0;i<providers.size();i++)

			{

				Log.i("info", providers.get(i));

			}*/

			

			if(lm.isProviderEnabled(LocationManager.GPS_PROVIDER))

			{

				lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, iAutoUpdateFrequency, 1, this);

			}

			else if(lm.isProviderEnabled(LocationManager.NETWORK_PROVIDER))

			{

				lm.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, iAutoUpdateFrequency, 1, this);

			}	

			

			//asyncTimer = new Timer();

		}

		catch(Exception ex)

		{

			Log.e("error", "Set LocationManager Failed---->" + ex.getMessage());

		}

		

		Log.i("info", "LocationService Create Success");

	}



	@Override

	public int onStartCommand(Intent intent, int flags, int startId) {

		// TODO Auto-generated method stub

		return START_STICKY;

	}



	@Override

	public void onDestroy() {

		// TODO Auto-generated method stub

		unregisterReceiver(broadcast);

		lm.removeUpdates(this);

		Log.i("info", "Service Destroy");

	}



	@Override

	public boolean onUnbind(Intent intent) {

		// TODO Auto-generated method stub

		Log.i("info", "Service Unbind");

		return super.onUnbind(intent);

	}

	

	private class MyBroadcastReceiver extends BroadcastReceiver

	{

		@Override

		public void onReceive(Context context, Intent intent) 

		{

			// TODO Auto-generated method stub

			if(intent.getAction().equals(ConstDef.ACTION_REQUIRE_LOCATION))

			{

				new LocationAsyncTask().execute((Void[])null);

			}

			else if(intent.getAction().equals(ConstDef.ACTION_UPMYLOCATION))

			{

				

			}

		}		

	}

	

	private class LocationAsyncTask extends AsyncTask<Void, Void, Location>

	{



		@Override

		protected Location doInBackground(Void... params) {

			// TODO Auto-generated method stub		

			Location result = null;

			

			for(int i=0;i<5;i++)

			{

				if(lm.isProviderEnabled(LocationManager.GPS_PROVIDER))

				{

					result = lm.getLastKnownLocation(LocationManager.GPS_PROVIDER);

					if(result == null)

					{

						if(lm.isProviderEnabled(LocationManager.NETWORK_PROVIDER))

						{

							result = lm.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);

						}

					}					

				}

				else if(lm.isProviderEnabled(LocationManager.NETWORK_PROVIDER))

				{

					result = lm.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);

				}

				

				if(result != null)

				{

					break;

				}

			}			

			

			return result;

		}



		@Override

		protected void onPostExecute(Location result) 

		{

			// TODO Auto-generated method stub

			Intent intent = new Intent();

			intent.setAction(ConstDef.ACTION_LOCATION_DONE);

			if(result == null)

			{

				intent.putExtra("longitude", -1.0);

				intent.putExtra("latitude", -1.0);

			}

			else

			{

				intent.putExtra("longitude", result.getLongitude());

				intent.putExtra("latitude", result.getLatitude());

			}			

			sendBroadcast(intent);

		}

	}



	@Override

	public void onLocationChanged(Location location) {

		// TODO Auto-generated method stub

		if(location != null)

		{

			Log.i("info", "Check Location Changed");

			

			Intent intent = new Intent();

			intent.setAction(ConstDef.ACTION_LOCATION_DONE);

			intent.putExtra("longitude", location.getLongitude());

			intent.putExtra("latitude", location.getLatitude());

			sendBroadcast(intent);			

		}

	}



	@Override

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

		// TODO Auto-generated method stub

		

	}



	@Override

	public void onProviderEnabled(String provider) {

		// TODO Auto-generated method stub

		

	}



	@Override

	public void onProviderDisabled(String provider) {

		// TODO Auto-generated method stub

		

	}



	@Override

	public IBinder onBind(Intent intent) {

		// TODO Auto-generated method stub

		Log.i("info", "Service Bind");

		return binder;

	}



}



lm.isProviderEnabled(LocationManager.NETWORK_PROVIDER)总是为false,但是我网络确实是开了的,GPS就可以判断,谁知道怎么回事吗?

============解决方案1============


lm = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
我的在这里就直接抛异常了

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。