How to Reuse getExternalStorageState?

时光毁灭记忆、已成空白 提交于 2019-11-27 08:33:18

问题


How can this be written in its own class to be used over and over again? And where the comment line "//Loads the List" is, I need to be able to change that at runtime.

Thnx ahead of time for the info.

/**
 * -- Check to See if the SD Card is Mounted & Loads the Ordered List
 * ======================================================================
 **/
private void storageState() {
    if (android.os.Environment.getExternalStorageState().equals(
            android.os.Environment.MEDIA_MOUNTED)) {

        orderASC();// Loads the list

    } else if (android.os.Environment.getExternalStorageState().equals(
            android.os.Environment.MEDIA_UNMOUNTED)) {
        Alerts.sdCardMissing(this);
    }
}

REVISED:

class StorageStateChecker  {
  static void storageState(Activity param, Listener l) {
    if (android.os.Environment.getExternalStorageState().equals(
            android.os.Environment.MEDIA_MOUNTED)) {

        l.orderASC_Label();//Load the list by Label ASC
        l.orderDSC_Label();
        l.orderASC_Title();//Load the list by Title ASC
        l.orderDSC_Title();

    } else if (android.os.Environment.getExternalStorageState().equals(
            android.os.Environment.MEDIA_UNMOUNTED)) {

            // Pass context to AlertDialog.Builder
            AlertDialog alertDialog = new AlertDialog.Builder(null).create();
            alertDialog.setTitle("External Storage State");
            alertDialog.setMessage("Your SD-Card is not mounted!  If the device is plugged into a computer via the USB, please disconect the device.");
            alertDialog.setButton("OK", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int which) {
                    //this.finish();
                }
            });
            // alertDialog.setIcon(R.drawable.icon);
            alertDialog.show();
    }
  }

public interface Listener {
    public void orderASC_Label();
    public void orderDSC_Label();
    public void orderASC_Title();
    public void orderDSC_Title();
  }
}

回答1:


I would do this:

public static boolean performExternalStorageOperation(Runnable doIfMounted) {
    if (android.os.Environment.getExternalStorageState().equals(
            android.os.Environment.MEDIA_MOUNTED)) {

        orderASC();// Loads the list
        if(doIfMounted != null) {
            doIfMounted.run();
        }
        return true;
    } else if (android.os.Environment.getExternalStorageState().equals(
            android.os.Environment.MEDIA_UNMOUNTED)) {
        Alerts.sdCardMissing(this);
    }
    return false;
}

You can replace the Runnable with any kind of generic Listener (I use OnClickListeners a lot for actions that aren't necessarily clicks) or write your own callback class with a common method to call, but that would be my general approach.




回答2:


This seems a little trivial for it's own class, but one approach is:

class StorageStateChecker  {
  static void storageState(XXX param, Listener l) {
    if (android.os.Environment.getExternalStorageState().equals(
            android.os.Environment.MEDIA_MOUNTED)) {
        l.orderASC();// Loads the list

    } else if (android.os.Environment.getExternalStorageState().equals(
            android.os.Environment.MEDIA_UNMOUNTED)) {
        Alerts.sdCardMissing(this);
    }
  }

  public interface Listener {
    public void orderASC();
  }
}

Note that XXX param needs replacing with whatever this represents in the call Alerts.sdCardMissing(this); as Alerts isn't an Android SDK class, I could only guess.

To use the code, just call StorageStateChecker(param /* was 'this' */, callbackClass /* implements StorageStateChecker.Listener */);



来源:https://stackoverflow.com/questions/5889385/how-to-reuse-getexternalstoragestate

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!