导出文件的文件名的设置

Android Studio

有时候,为了导出的文件,不会覆盖上一次导出的文件名。不然重命名,又是一大堆代码——要去是判断文件在不在,如果在,又得写个UI,弹出个对话框,让用户修改,修改后又得判空……所幸就搞了一个时间前缀,这样不重复,下次找的时候,还能根据时间找——一举两得。

不过,最近在测试的时候,发现华为手机(鸿蒙4.0目前的最新版本)似乎不支持

LocalTime currentTime;
currentTime = LocalTime.now();
String time = String.valueOf(currentTime);
String fileName = time + "test.txt";

Logcat里报错,但是不闪退。

但是如果改成

LocalDate currentDate;
currentDate = LocalDate.now();
String date = String.valueOf(currentDate);
String fileName = date + "test.txt";

则导出没有问题

Ps:上述代码需要API 26及以上,也就是Android版本8以上。

我看了一下time的格式。默认是格式大约是这样子的:

12:30:15.123【12点30分15.123秒】

原因是文件名不支持带有冒号“:”——纯安卓机不报错,比如小米。

于是,将time中的冒号替换成“-”

time = time.replace(":", "-");

上面的例子出印出来的格式就是12-30-15.123

然后,

String fileName = date + time + "test.txt";

这样就不会报错了!

当然,在这前,还要申请写权限。manifest.xml里


然后在相应的Activity里,动态申请。其中,华为手机由于那啥,还得特别申请,不然无法写入。

    /*
     * android 动态权限申请
     */
    public static void verifyStoragePermissions(AppCompatActivity activity) {
        try {
            //检测是否有写的权限
            int permission = ActivityCompat.checkSelfPermission(activity,
                    "android.permission.WRITE_EXTERNAL_STORAGE");
            if (permission != PackageManager.PERMISSION_GRANTED) {
                // 没有写的权限,去申请写的权限,会弹出对话框
                ActivityCompat.requestPermissions(activity,
                        Constant.PERMISSIONS_STORAGE, Constant.REQUEST_EXTERNAL_STORAGE);
            }
        } catch (Exception e) {
            Logger.getGlobal().log(Level.SEVERE, "An error occurred", e);
        }
    }

    /*
     * 鸿蒙 动态权限申请
     * 分开写是因为一个要带@RequiresApi(api = Build.VERSION_CODES.R),而一个不能带!
     */
    @RequiresApi(api = Build.VERSION_CODES.R)
    public void HarmonyOSPermission() {
        //判断是否获取MANAGE_EXTERNAL_STORAGE权限:
        boolean isHasStoragePermission = Environment.isExternalStorageManager();
        if (!isHasStoragePermission) {
            Intent intent = new Intent();
            intent.setAction(Settings.ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION);
            startActivity(intent);
        }
    }

然后在onCreate()里,加载

 verifyStoragePermissions(this);
 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
      HarmonyOSPermission();
 }
 //SD卡读写权限
    public static final int REQUEST_EXTERNAL_STORAGE = 1;
    public static final String[] PERMISSIONS_STORAGE = {
            "android.permission.READ_EXTERNAL_STORAGE",
            "android.permission.WRITE_EXTERNAL_STORAGE"};

class Constant如上所写。

你可能感兴趣的:(android,studio,java)