5

GPS を使用するアプリを作成しています。初めてonCreate()GPS が有効になっているかどうかを確認しています。有効になっていない場合は、ユーザーを設定メニューに送り、GPS を有効に設定します。

GPS が有効になったら、実行を開始します。しかし、その間にユーザーが通知マネージャーで GPS スクロールを停止した場合、どうすればこれを知ることができますか?

私のメソッドは、GPS が有効になっていないときに 1 回だけ実行されるためです。その後、再度無効にすると実行されません。

I just want to know whenever in between the work the GPS is disabled by the user. Just this information is required.

これが私のコードです。

class LocationFinderService extends Service{

    boolean gps_enabled;
    LocationManager locationManager;
    @Override
    public void onCreate() {
        // TODO Auto-generated method stub
        super.onCreate();
        locationManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);
        if(!isGpsEnabled())
        {
            startGpsForLocation();
            stopSelf();
        }

    }
    @Override
    public IBinder onBind(Intent intent) {
        // TODO Auto-generated method stub
        return null;
    }

    public boolean isGpsEnabled()
    {
        gps_enabled = (locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)&& locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER));
        Log.i("Log", "Gps:  "+gps_enabled);
        return gps_enabled;
    }

    public void startGpsForLocation()
    {
        Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK) ;
        startActivity(intent);
        Toast.makeText(this, "Please start the GPS", Toast.LENGTH_LONG).show();
    }
}

Activity クラスのボタン クリックでこのサービスを呼び出しています。

どんな助けでも大歓迎です。

4

3 に答える 3

3
        lmGps.requestLocationUpdates(LocationManager.GPS_PROVIDER,0,0,gpsLocationListener);
        lmGps.addGpsStatusListener(gpsStatusListener);

gpsLocationListner は

LocationListener gpsLocationListener=new LocationListener(){
        public void onLocationChanged(Location location){
            dGpsLat=location.getLatitude();
            dGpsLng=location.getLongitude();


        dLat=dGpsLat;
        dLng=dGpsLng;
        try{
        SaveLocation();
    }
        catch (Exception e) {
            sResponse=e.toString();
            return;
        }
    }
    public void onStatusChanged(String provider,int status,Bundle extras){}
    public void onProviderEnabled(String provider){}
    public void onProviderDisabled(String provider){}
};

gpsStatusListener

GpsStatus.Listener gpsStatusListener=new GpsStatus.Listener(){
        @Override
        public void onGpsStatusChanged(int event){
            if(event==GpsStatus.GPS_EVENT_SATELLITE_STATUS){
                try{
                    GpsStatus status=lmGps.getGpsStatus(null);
                    sats=status.getSatellites();
                    Iterator satI=sats.iterator();

                    int count=0;
                    while(satI.hasNext()){
                        GpsSatellite gpssatellite=(GpsSatellite) satI.next();
                        if(gpssatellite.usedInFix()){
                            count++;
                        }
                    }
                    iSalelliteCount=count;
                }
                catch(Exception ex){}
            }
        }
    };
于 2012-11-23T07:03:13.643 に答える
2

BroadcastReceiverを1つ作成するだけです

public class InternetConnectionBroadcast extends BroadcastReceiver 
 {
    private Handler handler = new Handler();
    public static String state;
    private Context netcontext;
    public void onReceive(Context context, Intent intent) 
    {
     netcontext = context;
     NetworkInfo info = intent.getParcelableExtra(ConnectivityManager.EXTRA_NETWORK_INFO);

     if(null != info)
     {
             state = getNetworkStateString(info.getState());
             Log.i("----------Network State",state);
     }
}

private String getNetworkStateString(NetworkInfo.State state)
{
    String stateString = "Unknown";
    switch(state)
    {
            case CONNECTED:         stateString = "Connected";      break;

            case CONNECTING:        stateString = "Connecting";     break;

            case DISCONNECTED:      

                stateString = "Disconnected";  
                handler.removeCallbacks(sendUpdatesToUI);
                handler.post(sendUpdatesToUI);

                break;

            case DISCONNECTING:     stateString = "Disconnecting";  break;

            case SUSPENDED:         stateString = "Suspended";      break;

            default:                stateString = "Unknown";        break;
    }
    return stateString;
}


private Runnable sendUpdatesToUI = new Runnable() 
{
     public void run() 
     {
             Toast.makeText(netcontext,"Please Check Your Internet Connection",Toast.LENGTH_SHORT).show();   
     }
}; }

manifest.xmlにも登録

<receiver android:name="com.example.utility.InternetConnectionBroadcast">
     <intent-filter>
     <action android:name="android.net.conn.CONNECTIVITY_CHANGE" /> 
     </intent-filter>
     </receiver>

これで、接続が失われるたびに、ユーザーにメッセージが通知されます。

于 2012-11-23T06:49:35.647 に答える
1

GPSStatus.Listener を使用してみてください:

http://developer.android.com/reference/android/location/GpsStatus.Listener.html

于 2012-11-23T06:44:50.553 に答える