简体   繁体   中英

Get the latitude and longtitude using BroadCastReceiver in android Application?

Hai am new in android Application,am trying to get the latitude and longtitude using Broadcast receiver.But my Application is Getting force Close.I dont know why it happens.Anybody kindly rectify my error.

        @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)
"

my manifestfile* update *

<?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>

Move the line

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

from onclick method to oncreate method

Register the broadcast Receiver in your manifest. refer this

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM