gpt4 book ai didi

android.os.FileUriExposedException : file. jpg 通过 ClipData.Item.getUri() 暴露在应用程序之外

转载 作者:IT老高 更新时间:2023-10-28 21:41:42 26 4
gpt4 key购买 nike

我尝试做一个按钮来打开相机并拍照。我的代码在这里

//for imports check on bottom of this code block

public class HomeProfileActivity extends AppCompatActivity {
//Button camera
public static final String TAG = HomeProfileActivity.class.getSimpleName();
public static final int REQUEST_TAKE_PHOTO = 0;
public static final int REQUEST_TAKE_VIDEO = 1;
public static final int REQUEST_PICK_PHOTO = 2;
public static final int REQUEST_PICK_VIDEO = 3;
public static final int MEDIA_TYPE_IMAGE = 4;
public static final int MEDIA_TYPE_VIDEO = 5;

private Uri mMediaUri;
private ImageView photobutton;
private Button buttonUploadImage, buttonTakeImage;

protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home_profile);
ButterKnife.bind(this);
}

@OnClick(R.id.buttonTakeImage)
void takePhoto() {
mMediaUri = getOutputMediaFileUri(MEDIA_TYPE_IMAGE);
if (mMediaUri == null) {
Toast.makeText(this,
"There was a problem accessing your device's external storage.",
Toast.LENGTH_LONG).show();
}
else {
Intent takePhotoIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
takePhotoIntent.putExtra(MediaStore.EXTRA_OUTPUT, mMediaUri);
startActivityForResult(takePhotoIntent, REQUEST_TAKE_PHOTO);
}
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);

if (resultCode == RESULT_OK){
if (requestCode == REQUEST_TAKE_PHOTO) {
Intent intent = new Intent(this, ViewImageActivity.class);
intent.setData(mMediaUri);
startActivity(intent);
}
}
else if (resultCode != RESULT_CANCELED){
Toast.makeText(this, "Sorry, there was an error", Toast.LENGTH_SHORT).show();
}
}

private Uri getOutputMediaFileUri(int mediaType) {
// check for external storage
if (isExternalStorageAvailable()) {
// get the URI

// 1. Get the external storage directory
File mediaStorageDir = getExternalFilesDir(Environment.DIRECTORY_PICTURES);

// 2. Create a unique file name
String fileName = "";
String fileType = "";
String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());

if (mediaType == MEDIA_TYPE_IMAGE) {
fileName = "IMG_" + timeStamp;
fileType = ".jpg";
} else if (mediaType == MEDIA_TYPE_VIDEO) {
fileName = "VID_" + timeStamp;
fileType = ".mp4";
} else {
return null;
}
// 3. Create the file
File mediaFile;
try {
mediaFile = File.createTempFile(fileName, fileType, mediaStorageDir);
Log.i(TAG, "File: " + Uri.fromFile(mediaFile));

// 4. Return the file's URI
return Uri.fromFile(mediaFile);
}
catch (IOException e) {
Log.e(TAG, "Error creating file: " +
mediaStorageDir.getAbsolutePath() + fileName + fileType);
}
}

// something went wrong
return null;
}

private boolean isExternalStorageAvailable(){
String state = Environment.getExternalStorageState();
if (Environment.MEDIA_MOUNTED.equals(state)){
return true;
}
else {
return false;
}
}

import android.content.Intent;
import android.content.SharedPreferences;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.provider.MediaStore;
import android.support.annotation.NonNull;
import android.support.design.widget.BottomNavigationView;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;

import butterknife.ButterKnife;
import butterknife.OnClick;

我的方法onclick中的startActivityForResult也有问题并且 import java.text.SimpleDateFormat; 也在异常运行时跳转我正在使用 buildtoolsversion sdk 25

最佳答案

除了使用 FileProvider 的解决方案之外,还有另一种解决方法。简单地说

 StrictMode.VmPolicy.Builder builder = new StrictMode.VmPolicy.Builder();
StrictMode.setVmPolicy(builder.build());

在 Application.onCreate() 方法中。这样VM就忽略了文件URI暴露。

关于android.os.FileUriExposedException : file. jpg 通过 ClipData.Item.getUri() 暴露在应用程序之外,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42251634/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com