============问题描述============
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()); } */ /*Listproviders = lm.getProviders(false); for(int i=0;i " + 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 { @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);
我的在这里就直接抛异常了