微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Android使用AlertDialog激活gps:如何等待用户采取行动?

我读过不同的帖子,因为阻止了用户界面,所以当显示AlertDialog时,无法等待用户采取操作.

但是,像Facebook这样的应用程序显示Gps目前被禁用.要启用gps吗?提醒对话框,等待用户按是/否.
我认为可以使用2种不同的活动,第一种只包含gps警报对话框,但这似乎并不正确,并且绝对不会像Facebook这样做.

任何人都可以告诉我如何实现这一点?

这是我的代码

@Override
    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    InitializeComponents();

    EnableGPSIfPossible();


        ListAsync lAsync = new ListAsync(this);
        lAsync .execute();
    }


    private void EnableGPSIfPossible()
{   
    final LocationManager manager = (LocationManager) getSystemService( Context.LOCATION_SERVICE );
     if ( !manager.isProviderEnabled( LocationManager.GPS_PROVIDER ) ) {
            builDalertMessageNoGps();
        }
}

 private  void builDalertMessageNoGps() {
        final AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setMessage("Yout GPS seems to be disabled,do you want to enable it?")
               .setCancelable(false)
               .setPositiveButton("Yes",new DialogInterface.OnClickListener() {
                   public void onClick(@SuppressWarnings("unused") final DialogInterface dialog,@SuppressWarnings("unused") final int id) {
                     startActivity(new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS));
                   }
               })
               .setNegativeButton("No",new DialogInterface.OnClickListener() {
                   public void onClick(final DialogInterface dialog,@SuppressWarnings("unused") final int id) {
                        dialog.cancel();
                   }
               });
        final AlertDialog alert = builder.create();
        alert.show();
    }

所以,在我的代码中,AsynTask是imediately启动的,而不用等待用户激活gps. (这是一个正常的行为)

谢谢!

解决方法

你可以做的是这样的:

GPSManager.java:

public class GPSManager {

    private Activity activity;
    private LocationManager mlocManager;
    private LocationListener gpsListener;

    public GPSManager(Activity activity) {
        this.activity = activity;
    }

    public void start() {
        mlocManager = (LocationManager) activity
                .getSystemService(Context.LOCATION_SERVICE);

        if (mlocManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
            setUp();
            findLoc();
        } else {
            AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(
                    activity);
            alertDialogBuilder
                    .setMessage("GPS is disabled in your device. Enable it?")
                    .setCancelable(false)
                    .setPositiveButton("Enable GPS",new DialogInterface.OnClickListener() {
                                public void onClick(DialogInterface dialog,int id) {
                                    Intent callGPSSettingIntent = new Intent(
                                            android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS);
                                    activity.startActivity(callGPSSettingIntent);
                                }
                            });
            alertDialogBuilder.setNegativeButton("Cancel",new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog,int id) {
                            dialog.cancel();
                        }
                    });
            AlertDialog alert = alertDialogBuilder.create();
            alert.show();

        }
    }

    public void setUp() {
        gpsListener = new GPSListener(activity,mlocManager);
    }

    public void findLoc() {
        mlocManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,1,gpsListener);

        if (mlocManager.getLastKNownLocation(LocationManager.GPS_PROVIDER) == null)
            Toast.makeText(activity,"LAST Location null",Toast.LENGTH_SHORT)
                    .show();
        else {
            gpsListener.onLocationChanged(mlocManager
                    .getLastKNownLocation(LocationManager.GPS_PROVIDER));
        }
    }
}

GPSListener.java:

public class GPSListener implements LocationListener {

    private Activity activity;
    private LocationManager lm;
    private int numberOfUpdates;

    public static final int MAX_NUMBER_OF_UPDATES = 10;

    public GPSListener(Activity activity,LocationManager lm) {
        this.activity = activity;
        this.lm = lm;
    }

    @Override
    public void onLocationChanged(Location loc) {
        if (numberOfUpdates < MAX_NUMBER_OF_UPDATES) {
            numberOfUpdates++;

            Log.w("LAT",String.valueOf(loc.getLatitude()));
            Log.w("LONG",String.valueOf(loc.getLongitude()));
            Log.w("ACCURACY",String.valueOf(loc.getAccuracy() + " m"));
            Log.w("PROVIDER",String.valueOf(loc.getProvider()));
            Log.w("SPEED",String.valueOf(loc.getSpeed() + " m/s"));
            Log.w("ALTITUDE",String.valueOf(loc.getAltitude()));
            Log.w("bearing",String.valueOf(loc.getbearing() + " degrees east of true north"));

            String message;

            if (loc != null) {
                message = "Current location is:  Latitude = "
                        + loc.getLatitude() + ",Longitude = "
                        + loc.getLongitude();
                // lm.removeUpdates(this);
            } else
                message = "Location null";

            Toast.makeText(activity,message,Toast.LENGTH_SHORT).show();
        } else {
            lm.removeUpdates(this);
        }
    }

    @Override
    public void onProviderdisabled(String provider) {
        Toast.makeText(activity,"Gps disabled",Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onProviderEnabled(String provider) {
        Toast.makeText(activity,"Gps Enabled",Toast.LENGTH_SHORT).show();
    }

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

    }

}

然后从你的活动:

GPSManager gps = new GPSManager(
                                    yourActivity.this);
                            gps.start();

原文地址:https://www.jb51.cc/android/312651.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐