我在用断点续传根据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