2012-01-07 27 views
3

海是新的Android應用程序,我試圖獲得使用廣播接收器的經緯度。但我的應用程序正在獲取力量關閉。我不知道它爲什麼發生。任何人善意糾正我的錯誤。在android應用程序中使用BroadCastReceiver獲取緯度和經度?

 @Override 
     public void onClick(View v) 
     { 
      locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 
      // Define the criteria how to select the locatioin provider -> use 
      // default 
      Criteria criteria = new Criteria(); 

     provider = locationManager.getBestProvider(criteria, false); 
     Location location = locationManager.getLastKnownLocation(provider); 

     // Initialize the location fields 
     if (location != null) { 
      System.out.println("Provider " + provider + " has been selected."); 
      float lat = (float) (location.getLatitude()); 
      float lng = (float) (location.getLongitude()); 
      latituteField.setText(String.valueOf(lat)); 
      longitudeField.setText(String.valueOf(lng)); 

     } else { 
      latituteField.setText("provider not available"); 
      longitudeField.setText("provider not available"); 
     } 
      registerReceiver(receiver,new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION)); 
     } 
    }); 

     private class ConnectivityReceiver extends BroadcastReceiver{ 

      @Override 
      public void onReceive(Context context, Intent intent) { 
        NetworkInfo info = intent.getParcelableExtra(ConnectivityManager.EXTRA_NETWORK_INFO); 

        if(null != info) 
        { 
          String state = getNetworkStateString(info.getState()); 
          String stateString = info.toString().replace(',', '\n'); 
          if(state.equals("Connected")){ 
           result(); 

          } 

        } 
      } 

} 
    @Override 
    protected void onResume() { 
     super.onResume(); 
     //locationManager.requestLocationUpdates(provider,1000, 1, this); 
     locationManager.requestLocationUpdates(
       provider, 
       MINIMUM_TIME_BETWEEN_UPDATES, 
       MINIMUM_DISTANCE_CHANGE_FOR_UPDATES, 
       this 
     ); 
    } 

    /* Remove the locationlistener updates when Activity is paused */ 
    @Override 
    protected void onPause() { 
     super.onPause(); 
     locationManager.removeUpdates(this); 
    } 

    @Override 
    public void onLocationChanged(Location location) { 
     // TODO Auto-generated method stub 
     float lat = (float) (location.getLatitude()); 
     float lng = (float) (location.getLongitude()); 
     longitudeField.setText(String.valueOf(lng)); 
    } 

    @Override 
    public void onProviderDisabled(String provider) { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public void onProviderEnabled(String provider) { 
     // TODO Auto-generated method stub 
     Toast.makeText(this, "Enabled new provider " + provider, 
       Toast.LENGTH_SHORT).show(); 

    } 

    @Override 
    public void onStatusChanged(String provider, int status, Bundle extras) { 
     // TODO Auto-generated method stub 
     Toast.makeText(this, "Disenabled provider " + provider, 
       Toast.LENGTH_SHORT).show(); 

    } 
    protected void Display(Cursor c) { 
     Toast.makeText(this, "rowid: " + c.getString(0) + "\n" + 
     "Latitude: " + c.getString(1) + "\n" + "Longitude: " + c.getString(2) + "\n" + 
     Toast.LENGTH_LONG, 0).show();  
    } 

    **updata Logcat Error Message** 



    "01-06 12:08:27.376: ERROR/AndroidRuntime(9725): java.lang.RuntimeException: Unable to resume activity {com.varma.samples.conntest/com.varma.samples.conntest.MainActivity}: java.lang.NullPointerException 
    01-06 12:08:27.376: ERROR/AndroidRuntime(9725):  at android.app.ActivityThread.performResumeActivity(ActivityThread.java:3133) 
    01-06 12:08:27.376: ERROR/AndroidRuntime(9725):  at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:3148) 
    01-06 12:08:27.376: ERROR/AndroidRuntime(9725):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2689) 
    01-06 12:08:27.376: ERROR/AndroidRuntime(9725):  at android.app.ActivityThread.access$2300(ActivityThread.java:126) 
    01-06 12:08:27.376: ERROR/AndroidRuntime(9725):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2038) 
    01-06 12:08:27.376: ERROR/AndroidRuntime(9725):  at android.os.Handler.dispatchMessage(Handler.java:99) 
    01-06 12:08:27.376: ERROR/AndroidRuntime(9725):  at android.os.Looper.loop(Looper.java:123) 
    01-06 12:08:27.376: ERROR/AndroidRuntime(9725):  at android.app.ActivityThread.main(ActivityThread.java:4632) 
    01-06 12:08:27.376: ERROR/AndroidRuntime(9725):  at java.lang.reflect.Method.invokeNative(Native Method) 
    01-06 12:08:27.376: ERROR/AndroidRuntime(9725):  at java.lang.reflect.Method.invoke(Method.java:521) 
    01-06 12:08:27.376: ERROR/AndroidRuntime(9725):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:871) 
    01-06 12:08:27.376: ERROR/AndroidRuntime(9725):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:629) 
    01-06 12:08:27.376: ERROR/AndroidRuntime(9725):  at dalvik.system.NativeStart.main(Native Method) 
    01-06 12:08:27.376: ERROR/AndroidRuntime(9725): Caused by: java.lang.NullPointerException 
    01-06 12:08:27.376: ERROR/AndroidRuntime(9725):  at com.varma.samples.conntest.MainActivity.onResume(MainActivity.java:158) 
    01-06 12:08:27.376: ERROR/AndroidRuntime(9725):  at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1149) 
    01-06 12:08:27.376: ERROR/AndroidRuntime(9725):  at android.app.Activity.performResume(Activity.java:3823) 
    01-06 12:08:27.376: ERROR/AndroidRuntime(9725):  at android.app.ActivityThread.performResumeActivity(ActivityThread.java:3123) 
" 

我manifest資源配置文件* 更新 *

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.varma.samples.conntest" 
    android:versionCode="1" 
    android:versionName="1.0"> 
<uses-sdk android:minSdkVersion="8" /> 

<application android:icon="@drawable/icon" android:label="@string/app_name"> 
    <activity android:name=".MainActivity" 
       android:label="@string/app_name"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 

</application> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 
     <uses-permission android:name="android.permission.INTERNET"/> 
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> 
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 
<uses-permission android:name="android.permission.READ_PHONE_STATE"/> 
<uses-permission android:name="android.permission.INTERNET"/> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
<uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION" />  </manifest> 
+1

您在onResume()中獲得'NullPointerException' EXCEPTION,因此請檢查您是否在onCreate()中的onResume()之前正確初始化了所有變量和LocationManager。 – 2012-01-07 06:32:31

+0

您是否已將接收器註冊到清單中? – Ghost 2012-01-07 06:33:33

+0

你可以把你的清單文件放在這裏? – 2012-01-07 06:38:58

回答

1

移動線

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

從的onclick方法onCreate方法

+0

實際上它只在oncreate中,那個時候也強制關閉。後來我把它加了進去 – Mercy 2012-01-07 07:06:41

+0

用位置管理器初始化日誌後在oncreate – nandeesh 2012-01-07 07:15:47

+0

01-07 12:48:56.552:INFO/ConnTest(864):[email protected] 我喜歡這個先生 – Mercy 2012-01-07 07:30:30

0

註冊在您的清單廣播接收機。請參閱this

相關問題