Android写入文件电脑上看不到的原因

我在用断点续传根据URL下载一张图片到手机外部存储之后,在手机上的文件管理APP中可以看到文件已经成功写入,但是连接电脑在电脑上看不到该文件.

 

在重命名文件之后或者重启手机之后能在电脑上看到该文件

 

经过网上查找资料终于发现原因:

Environment.getExternalStorageDirectory().getPath()获取外部存储

由于现在很多手机因为容量足够,不再外插SD卡,获取的外部存储路径就是在手机根目录下,而手机对于外部存储的文件有一个扫描机制,直接写入文件到手机外部存储由于系统未重新扫描外部存储,所以在电脑上显示不了文件,而重命名文件和重启手机的方式可以触发扫描机制,所以这两个操作之后就可以在电脑上看到该文件

 

解决方案

在文件写入完毕之后手动调用手机系统的扫描机制:

Intent intent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
File file = new File(filePath);
Uri uri = Uri.fromFile(file);
intent.setData(uri);
context.sendBroadcast(intent);

还有一种更简便的调用代码:

MediaScannerConnection.scanFile(context, new String[] { file.getAbsolutePath() }, null, null);

还有一种无法写入文件的情况是因为没有申请权限 

Android API23也就是6.0版本之后写入外部存储需要申请权限,而且该权限属于危险权限,需要动态申请

//申请写入权限
if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.WRITE_EXTERNAL_STORAGE)!= PackageManager.PERMISSION_GRANTED){
ActivityCompat.requestPermissions(MainActivity.this,new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},1);
}
    @Override
    public void onRequestPermissionsResult(int requestCode,String [] permissions,int[] grantResults){
        switch (requestCode){
            case 1:
                if (grantResults.length>0&&grantResults[0]!=PackageManager.PERMISSION_GRANTED){
                    Toast.makeText(this,"拒绝权限将无法正常使用",Toast.LENGTH_SHORT).show();
                    finish();
                }
                break;
            default:
        }
    }

 

最后感谢这三篇博客让我知道了解决方案:

https://www.cnblogs.com/andy-songwei/p/7123209.html

https://blog.csdn.net/wwp9527/article/details/82799349

https://blog.csdn.net/qq_29654885/article/details/80436847

  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值