jav*_*top 9 android share android-intent
我基于这篇博文成功编写了一个应用程序,但更简单,它使用POST请求通过HTTP流式传输图像.
我无法弄清楚(在搜索网页并在Android SDK文档中搜索之后),在分享之前如何获得图像的大小?
我只能打开我在exampkle和其他任何地方看到的输入流:
ContentResolver cr = getContentResolver();
InputStream is = cr.openInputStream(uri);
Run Code Online (Sandbox Code Playgroud)
给定的博客文章示例使用getBytesFromFile(is),因此可以获得那里的大小,但这不是一个解决方案.一些图像是巨大的,而Android应用程序在堆空间有限.我希望我的应用程序适用于所有可想象的图像尺寸(通过Wifi共享时不是问题).
因此,对我来说唯一的选择是将输入流"转发"到某个HTTP输出流,我这样做,哪个有效.但是这种方法在发送之前不会给我图像大小.
wra*_*pps 17
您也可以这样检查:
Uri fileUri = resultData.getData();
Cursor cursor = getActivity().getContentResolver().query(fileUri,
null, null, null, null);
cursor.moveToFirst();
long size = cursor.getLong(cursor.getColumnIndex(OpenableColumns.SIZE));
cursor.close();
Run Code Online (Sandbox Code Playgroud)
资料来源:https: //developer.android.com/training/secure-file-sharing/retrieve-info.html
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == Activity.RESULT_OK) {
if (requestCode == 9991) {
if (data == null) {
//no data present
return;
}
ContentResolver cr = getContentResolver();
InputStream is = null;
File file = new File(fileUri.getPath());
try {
is = cr.openInputStream(fileUri);
cr.getType(fileUri);
int size = is.available();
Log.d(TAG, "Size 151: " + getFileSize(size));
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
Run Code Online (Sandbox Code Playgroud)
}
这是我修复与此类似的问题的方法,这适用于 KITKAT 以下的 Android API。
private static final DecimalFormat format = new DecimalFormat("#.##");
private static final long MiB = 1024 * 1024;
private static final long KiB = 1024;
public String getFileSize(long file) {
final double length = Double.parseDouble(String.valueOf(file));
if (length > MiB) {
return format.format(length / MiB) + " MiB";
}
if (length > KiB) {
return format.format(length / KiB) + " KiB";
}
return format.format(length) + " B";
}
Run Code Online (Sandbox Code Playgroud)
flo*_*lob -2
只需向 InputStream 询问可用字节数即可获取文件大小。
ContentResolver cr = getContentResolver();
InputStream is = cr.openInputStream(uri);
int size = is.available();
Run Code Online (Sandbox Code Playgroud)
这曾经非常可靠。不知道这是否仍然成立,因为结果不能保证考虑到文件中的所有字节。
| 归档时间: |
|
| 查看次数: |
5688 次 |
| 最近记录: |