Показать диалоговое окно предупреждения в onProviderDisabled в Android LocationListener - PullRequest
3 голосов
/ 17 августа 2011

Мне нужно использовать следующий код внутри метода onProviderDisabled. Но это не длится долго. Как я могу ждать, пока пользователь ответит?

AlertDialog.Builder builder = new AlertDialog.Builder(Activity.this);
        builder.setMessage("Your GPS is disabled! Would you like to enable it?").setCancelable(false).setPositiveButton("Enable GPS", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int id) {
                Intent gpsOptionsIntent = new Intent(android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS);
                startActivity(gpsOptionsIntent);
            }
        });
        builder.setNegativeButton("Do nothing", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int id) {
                dialog.cancel();
            }
        });
        AlertDialog alert = builder.create();
        alert.show();

Заранее спасибо !!

Ответы [ 2 ]

6 голосов
/ 17 августа 2011

Попробуй вот так.

public void onProviderDisabled(String provider) {
     Message msg = handler.obtainMessage();
     msg.arg1 = 1;
     handler.sendMessage(msg);
}

private final Handler handler = new Handler() {
     public void handleMessage(Message msg) {
          if(msg.arg1 == 1){
               if (!isFinishing()) { // Without this in certain cases application will show ANR
                    AlertDialog.Builder builder = new AlertDialog.Builder(Activity.this);
                    builder.setMessage("Your GPS is disabled! Would you like to enable it?").setCancelable(false).setPositiveButton("Enable GPS", new DialogInterface.OnClickListener() {
                         public void onClick(DialogInterface dialog, int id) {
                              Intent gpsOptionsIntent = new Intent(android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS);
                              startActivity(gpsOptionsIntent);
                          }
                     });
                     builder.setNegativeButton("Do nothing", new DialogInterface.OnClickListener() {
                          public void onClick(DialogInterface dialog, int id) {
                               dialog.cancel();
                          }
                     });
                     AlertDialog alert = builder.create();
                     alert.show();
               }
           }

       }
}; 
0 голосов
/ 17 августа 2011

Вы должны использовать AsyncTask для таких операций .. см. Здесь http://developer.android.com/reference/android/os/AsyncTask.html

...