#java #android #webview #save-image
Вопрос:
Поэтому, когда я открываю проводник файлов своего телефона, он показывает мое изображение, но оно равно 0B. Он также не загружает изображение. Похоже, что приложение неправильно записывает файл, и я не могу понять, почему оно это делает. Я уже некоторое время борюсь с этим. Если кто-нибудь может сказать мне, что я делаю не так, я был бы признателен. Я использую SDK 29. Это мой Java-код:
public void openFileChooser(ValueCallbacklt;Urigt; uploadMsg, String acceptType){ // Update message mUM = uploadMsg; try{ // Create camera captured image file path and name ContentResolver resolver = MainActivity.this.getContentResolver(); ContentValues contentValues = new ContentValues(); contentValues.put(MediaStore.MediaColumns.DISPLAY_NAME, "IMG_" String.valueOf(System.currentTimeMillis())); contentValues.put(MediaStore.MediaColumns.MIME_TYPE, "image/jpeg"); contentValues.put(MediaStore.MediaColumns.RELATIVE_PATH, Environment.DIRECTORY_PICTURES); Uri uri = resolver.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, contentValues); // Camera capture image intent final Intent captureIntent = new Intent( android.provider.MediaStore.ACTION_IMAGE_CAPTURE); captureIntent.putExtra(MediaStore.EXTRA_OUTPUT, uri); Intent i = new Intent(Intent.ACTION_GET_CONTENT); i.addCategory(Intent.CATEGORY_OPENABLE); i.setType("image/*"); // Create file chooser intent Intent chooserIntent = Intent.createChooser(i, "Image Chooser"); // Set camera intent to file chooser chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS , new Parcelable[] { captureIntent }); // On select image call onActivityResult method of activity startActivityForResult(chooserIntent, FILECHOOSER_RESULTCODE); } catch(Exception e){ Toast.makeText(getBaseContext(), "Exception:" e, Toast.LENGTH_LONG).show(); } } //For Android 5.0 public boolean onShowFileChooser( WebView webView, ValueCallbacklt;Uri[]gt; filePathCallback, WebChromeClient.FileChooserParams fileChooserParams) { if (mUMA != null) { mUMA.onReceiveValue(null); } mUMA = filePathCallback; Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); if (takePictureIntent.resolveActivity(MainActivity.this.getPackageManager()) != null) { File photoFile = null; try { photoFile = createImageFile(); takePictureIntent.putExtra("PhotoPath", mCM); } catch (IOException ex) { Log.e(TAG, "Image file creation failed", ex); new AlertDialog.Builder(MainActivity.this) .setTitle("Closing Activity") .setMessage(String.format("Failed to create image.rn %s", ex)) .setPositiveButton("OK", null) .setNegativeButton("No", null) .show(); } if (photoFile != null) { mCM = "file:" photoFile.getAbsolutePath(); takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(photoFile)); } else { takePictureIntent = null; } } Intent contentSelectionIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); contentSelectionIntent.addCategory(Intent.CATEGORY_OPENABLE); contentSelectionIntent.setType("*/*"); Intent[] intentArray; if (takePictureIntent != null) { intentArray = new Intent[]{takePictureIntent}; } else { intentArray = new Intent[0]; } Intent chooserIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); chooserIntent.putExtra(Intent.EXTRA_INTENT, contentSelectionIntent); chooserIntent.putExtra(Intent.EXTRA_TITLE, "Image Chooser"); chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, intentArray); startActivityForResult(chooserIntent, FCR); return true; } @Override public void onPermissionRequest(final PermissionRequest request){ request.grant(request.getResources()); } });