android轮子-----工具类 - Go语言中文社区

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:Users86130Desktopcopy工具.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)

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/ZKhero/article/details/105701254
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢