我按照一些教程,打開畫廊,選擇影像,然后顯示影像和檔案大小。目前,它似乎并沒有真正正確地獲得檔案大小,我不知道這是否是因為權限不正確或其他原因。附上onCreate、openGallery和onActivityResult代碼。
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(s savedInstanceState)。
setContentView(R.layout.activity_main)。
askPermission()。
imgOriginal = findViewById(R.id.imgOriginal);
imgCompressed = findViewById(R.id.imgCompressed);
txtOriginal = findViewById(R.id.txtOriginal);
txtCompressed = findViewById(R.id.txtCompressed);
txtQuality = findViewById(R.id.txtQuality);
txtHeight = findViewById(R.id.txtHeight);
txtWidth = findViewById(R.id.txtWidth);
seekBar = findViewById(R.id.seekQuality);
btnPick = findViewById(R.id.btnPick);
btnCompress = findViewById(R.id.btnCompress);
filepath = path.getAbsolutePath();
if (!path.exists()) {
path.mkdirs()。
}
seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override[/span
public void onProgressChanged(SeekBar seekBar, int i, boolean b) {
txtQuality.setText("Quality: "/span> i);
seekBar.setMax(100)。
}
@Override; }
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
});
btnPick.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
openGallery()。
}
});
btnCompress.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
int quality = seekBar.getProgress()。
int width = Integer.parseInt(txtWidth.getText().toString() )。
//int height = Integer.parseInt(txtHeight.getText().toString());
int height = Integer.parseInt(txtHeight.getText().toString() )。
Toast.makeText(MainActivity.this, "Quality" quality, Toast.LENGTH_SHORT).show()。
try {
compressedImage = new Compressor(MainActivity.this)
.setMaxWidth(width)
.setMaxHeight(高度)
.setQuality(質量)
.setCompressFormat(Bitmap.CompressFormat.JPEG)
.setDestinationDirectoryPath(filepath)
.compressToFile(originalImage)。
File finalFile = new File(filepath, originalImage.getName() )。
Bitmap finalBitmap = BitmapFactory.decodeFile(finalFile.getAbsolutePath())。
imgCompressed.setImageBitmap(finalBitmap)。
txtCompressed.setText("size: " Formatter.formatShortFileSize(MainActivity.this, finalFile.length()))。)
//Toast.makeText(MainActivity.this, filepath " Something went Wrong", Toast.LENGTH_SHORT).show();.
} catch (IOException e) {
e.printStackTrace()。
Toast.makeText(MainActivity.this, "Error while Compressing", Toast.LENGTH_SHORT).show()。
}
}
});
}
public void openGallery() {
Intent gallery = new Intent(Intent. ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI)。)
startActivityForResult(gallery, RESULT_IMAGE)。
}
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data)。
if (resultCode == RESULT_OK) {
btnCompress.setVisibility(View.VISIBLE)。
final Uri imageUri = data.getData();
try {
final InputStream imageStream = getContentResolver().openInputStream(imageUri)。
final Bitmap selectedImage = BitmapFactory.decodeStream(imageStream)。
imgOriginal.setImageBitmap(selectedImage)。
originalImage = new File(imageUri.getEncodedPath().replace("raw/", ")) 。
txtOriginal.setText("Size: " Formatter.formatShortFileSize(this, originalImage.length()))。)
Toast.makeText(MainActivity.this, "Size: " Formatter.formatShortFileSize(this, originalImage.length()), Toast.LENGTH_LONG).show()。
} catch (FileNotFoundException e) {
e.printStackTrace()。
Toast.makeText(this, "Something went Wrong", Toast.LENGTH_SHORT) .show();
}
} else {
Toast.makeText(this, "No Image Selected", Toast.LENGTH_SHORT).show()。
}
}
這是我的權限代碼,這可能是我的錯誤所在......教程建議使用Dexter,但如果有其他方法或對Dexter的幫助,我們將不勝感激。
private void askPermission() {
if (SDK_INT >= Build.VERSION_CODES.R) {
Dexter.withContext(this)
.withPermissions(Manifest.permission.MANAGE_EXTERNAL_STORAGE,
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.WRITE_EXTERNAL_STORAGE).withListener(new MultiplePermissionsListener() {
@Override
public void onPermissionsChecked(MultiplePermissionsReport multiplePermissionsReport) {
}
@Override
public void onPermissionRationaleShouldBeShown(List<PermissionRequest> list, PermissionToken permissionToken) {
permissionToken.continuePermissionRequest()。
}
}).check()。
} else {
Dexter.withContext(this)
.withPermissions(Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.WRITE_EXTERNAL_STORAGE)
.withListener(new MultiplePermissionsListener() {
@Override
public void onPermissionsChecked(MultiplePermissionsReport多重許可報告) {
}
@Override
public void onPermissionRationaleShouldBeShown(List<PermissionRequest> list, PermissionToken permissionToken) {
permissionToken.continuePermissionRequest()。
}
}).check()。
}
}
uj5u.com熱心網友回復:
if (result.getResultCode() == Activity.RESULT_OK ) {
//沒有任何請求代碼。
Intent data = result.getData()。
Uri selectedImage = data.getData()。
if (isFileLessThan2MB(selectedImage) <= 2000000){ // 2mp = 2000000
Glide.with(getContext()).load(selectedImage).in(binding.addressuploadImg)。
addressuri =selectedImage;
}else {
Toast.makeText(getContext(), "檔案大小應低于2mp", Toast.LENGTH_SHORT).show()。
}
}
private long isFileLessThan2MB(Uri file) {
Cursor returnCursor =
getActivity().getContentResolver().query(file, null, null, null, null) 。
/*
* 獲取游標中的資料的列索引。
* 移動到游標中的第一行,獲取資料。
*并顯示它。
*/
int nameIndex = returnCursor.getColumnIndex(OpenableColumns.DISPLAY_NAME)。
int sizeIndex = returnCursor.getColumnIndex(OpenableColumns.SIZE)。
returnCursor.moveToFirst()。
//
/// nameView.setText(returnCursor.getString(nameIndex));
//sizeView.setText(Long.toString(returnCursor.getLong(sizeIndex));
return returnCursor.getLong(sizeIndex)。
}
uj5u.com熱心網友回復:
獲取Uri的檔案大小的正確方法:
long size = DocumentFile.fromSingleUri(context,uri).length()。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/310325.html
標籤:
上一篇:寫入csv檔案時雙引號有時會消失
下一篇:安卓11存盤訪問和Java檔案庫
