android輪子-----工具類

整理下項目中遇到的輪子,後面做的時候直接方便移植

  1. android權限工具類

  2. android拷貝assets目錄到手機裏工具方法

權限管理工具類

/**
 * 權限管理
 */
public class PermissionsUtils {

    private final int mRequestCode = 101;// 權限請求碼

    /**
     * 是否需要去系統設置中
     */
    private boolean showSystemSetting = true;

    /**
     * 不再提示權限時的展示對話框
     */
    private AlertDialog mPermissionDialog;

    private PermissionsUtils() {
    }

    private static PermissionsUtils permissionsUtils;
    private ApplyResult mPermissionsResult;

    public static PermissionsUtils getInstance() {
        if (permissionsUtils == null) {
            permissionsUtils = new PermissionsUtils();
        }
        return permissionsUtils;
    }

    /**
     * 檢查權限
     * @param context 上下文
     * @param permissions 權限s
     * @param permissionsResult 返回接口
     */
    public void checkPermissions(Activity context, String[] permissions, @NonNull ApplyResult permissionsResult) {
        mPermissionsResult = permissionsResult;

        if (context == null || permissions == null) {
            return;
        }
        // 6.0才用動態權限
        if (Build.VERSION.SDK_INT < 23) {
            permissionsResult.onSuccess();
            return;
        }

        // 創建一個mPermissionList,逐個判斷哪些權限未授予,未授予的權限存儲到mPerrrmissionList中
        List<String> mPermissionList = new ArrayList<>();
        // 逐個判斷你要的權限是否已經通過
        for (String permission : permissions) {
            if (ContextCompat.checkSelfPermission(context, permission) != PackageManager.PERMISSION_GRANTED) {
                mPermissionList.add(permission);// 添加還未授予的權限
            }
        }

        // 申請權限
        if (mPermissionList.size() > 0) {// 有權限沒有通過,需要申請
            ActivityCompat.requestPermissions(context, permissions, mRequestCode);
        } else {
            // 說明權限都已經通過
            permissionsResult.onSuccess();
        }

    }

    /**
     * 請求權限後回調的方法
     * @param context 上下文
     * @param requestCode 是我們自己定義的權限請求碼
     * @param permissions 是我們請求的權限名稱數組
     * @param grantResults 是我們在彈出頁面後是否允許權限的標識數組
     */
    public void onRequestPermissionsResult(Activity context, int requestCode, @NonNull String[] permissions,
            @NonNull int[] grantResults) {
        if (context == null) {
            return;
        }
        boolean hasPermissionDismiss = false;// 有權限沒有通過
        if (mRequestCode == requestCode) {
            for (int grantResult : grantResults) {
                if (grantResult == -1) {
                    hasPermissionDismiss = true;
                }
            }
            // 如果有權限沒有被允許
            if (hasPermissionDismiss) {
                if (showSystemSetting) {
                    // 跳轉到系統設置權限頁面,或者直接關閉頁面,不讓他繼續訪問
                    showSystemPermissionsSettingDialog(context);
                } else {
                    mPermissionsResult.onFailed();
                }
            } else {
                // 全部權限通過
                mPermissionsResult.onSuccess();
            }
        }

    }

    private void showSystemPermissionsSettingDialog(final Activity context) {
        if (context == null) {
            return;
        }
        final String mPackName = context.getPackageName();
        if (mPermissionDialog == null) {
            mPermissionDialog = new AlertDialog.Builder(context).setMessage("請去設置中手動授予權限")
                    .setPositiveButton("設置", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            cancelPermissionDialog();

                            Uri packageURI = Uri.parse("package:" + mPackName);
                            Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS, packageURI);
                            context.startActivity(intent);
                            context.finish();
                        }
                    }).setNegativeButton("取消", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            // 關閉頁面或者做其他操作
                            cancelPermissionDialog();
                            // mContext.finish();
                            mPermissionsResult.onFailed();
                        }
                    }).create();
        }
        mPermissionDialog.show();
    }

    private void cancelPermissionDialog() {
        if (mPermissionDialog != null) {
            mPermissionDialog.cancel();
            mPermissionDialog = null;
        }

    }

    /**
     * 申請結果返回
     */
    public interface ApplyResult {
        /**
         * 成功
         */
        void onSuccess();

        /**
         * 失敗
         */
        void onFailed();
    }
}

使用截圖

從assets目錄中拷貝到手機存儲中

/**
 * 單例文件管理,完成拷貝後提供回調
 */
public class FileManager {

    private static FileManager instance;
    private static final int SUCCESS = 1;
    private static final int FAILED = 0;
    private Context context;
    private FileCopyCallback callback;
    private volatile boolean isSuccess;
    private String errorStr;

    public static FileManager getInstance(Context context) {
        if (instance == null) {
            instance = new FileManager(context);
        }

        return instance;
    }

    private FileManager(Context context) {
        this.context = context;
    }

    /**
     * 主線程通知handler
     */
    private Handler handler = new Handler(Looper.getMainLooper()) {
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            if (callback != null) {
                if (msg.what == SUCCESS) {
                    callback.onSuccess();
                }
                if (msg.what == FAILED) {
                    callback.onFailed(msg.obj.toString());
                }
            }
        }
    };

    /**
     * 拷貝assets到sd卡
     * @param srcPath 文件路徑
     * @param sdPath sd卡路徑
     * @return FileManager
     */
    public FileManager copyAssetsToSD(final String srcPath, final String sdPath) {
        new Thread(new Runnable() {
            @Override
            public void run() {
                copyAssetsToDst(context, srcPath, sdPath);
                if (isSuccess)
                    handler.obtainMessage(SUCCESS).sendToTarget();
                else
                    handler.obtainMessage(FAILED, errorStr).sendToTarget();
            }
        }).start();
        return this;
    }

    /**
     * 設置接口返回
     * @param callback callback
     */
    public void setFileOperateCallback(FileCopyCallback callback) {
        this.callback = callback;
    }

    private void copyAssetsToDst(Context context, String srcPath, String dstPath) {
        try {
            String fileNames[] = context.getAssets().list(srcPath);
            if (fileNames.length > 0) {
                File file = new File(Environment.getExternalStorageDirectory(), dstPath);
                if (!file.exists()) {
                    file.mkdirs();
                } else {
                    file.delete();
                }

                for (String fileName : fileNames) {
                    if (!srcPath.equals("")) { // assets 文件夾下的目錄
                        copyAssetsToDst(context, srcPath + File.separator + fileName,
                                dstPath + File.separator + fileName);
                    } else { // assets 文件夾
                        copyAssetsToDst(context, fileName, dstPath + File.separator + fileName);
                    }
                }
            } else {
                File outFile = new File(Environment.getExternalStorageDirectory(), dstPath);
                InputStream is = context.getAssets().open(srcPath);
                FileOutputStream fos = new FileOutputStream(outFile);
                byte[] buffer = new byte[1024];
                int byteCount;
                while ((byteCount = is.read(buffer)) != -1) {
                    fos.write(buffer, 0, byteCount);
                }
                fos.flush();
                is.close();
                fos.close();
            }
            isSuccess = true;
        } catch (Exception e) {
            e.printStackTrace();
            errorStr = e.getMessage();
            isSuccess = false;
        }
    }

    public interface FileCopyCallback {
        void onSuccess();

        void onFailed(String error);
    }

}

使用截圖

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-aNsvKY62-1587608512705)(C:\Users\86130\Desktop\copy工具.png)]

   e.printStackTrace();
        errorStr = e.getMessage();
        isSuccess = false;
    }
}

public interface FileCopyCallback {
    void onSuccess();

    void onFailed(String error);
}

}


使用截圖

![在這裏插入圖片描述](https://img-blog.csdnimg.cn/20200423102512254.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1pLaGVybw==,size_16,color_FFFFFF,t_70)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章