相关疑难解决方法(0)

android.os.FileUriExposedException:file:///storage/emulated/0/test.txt通过Intent.getData()暴露在app之外

当我尝试打开文件时,应用程序崩溃了.它可以在Android Nougat下运行,但在Android Nougat上它会崩溃.当我尝试从SD卡打开文件而不是从系统分区打开文件时,它只会崩溃.一些许可问题?

示例代码:

File file = new File("/storage/emulated/0/test.txt");
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.fromFile(file), "text/*");
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent); // Crashes on this line
Run Code Online (Sandbox Code Playgroud)

日志:

android.os.FileUriExposedException:file:///storage/emulated/0/test.txt通过Intent.getData()暴露在app之外

编辑:

在定位Android Nougat时,file://不再允许使用URI.我们应该使用content://URI代替.但是,我的应用程序需要打开根目录中的文件.有任何想法吗?

android android-file android-7.0-nougat

682
推荐指数
15
解决办法
38万
查看次数

拍摄相机意图后删除图库图像

我知道这有许多不同的方式,但我似乎无法从默认文件夹中删除图库图像.我正确地将文件保存到SD卡,我可以删除该文件,但在Camera文件夹下显示的默认图库文件不会删除.

我希望在返回活动后删除图像,因为文件已存储在SD卡下/Coupon2.

有什么建议?

public void startCamera() {
    Log.d("ANDRO_CAMERA", "Starting camera on the phone...");

    mManufacturerText = (EditText) findViewById(R.id.manufacturer);
    String ManufacturerText = mManufacturerText.getText().toString();
    String currentDateTimeString = new Date().toString();

    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    File filedir = new File(Environment.getExternalStorageDirectory()+"/Coupon2");
    filedir.mkdirs();

    File file = new File(Environment.getExternalStorageDirectory()+"/Coupon2", ManufacturerText+"-test.png");
    outputFileUri = Uri.fromFile(file);
    intent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri);

    startActivityForResult(intent, CAMERA_PIC_REQUEST);
}

protected void onActivityResult(int requestCode, int resultCode, Intent data) {  
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == CAMERA_PIC_REQUEST && resultCode == -1) {  
        Intent intent = new Intent("com.android.camera.action.CROP");
        intent.putExtra("crop", …
Run Code Online (Sandbox Code Playgroud)

android image android-camera-intent

64
推荐指数
4
解决办法
5万
查看次数

在解除相机意图之前如何拍摄多张照片?

我正在尝试使用通过intent(MediaStore.ACTION_IMAGE_CAPTURE)启动的默认设备相机应用程序拍摄多张照片.使用我正在测试的设备,相机启动,拍照,要求确认,然后返回到我处理结果的活动.

我考虑过使用广播接收器回调或内容观察者; 但是,在用户完成之前,我找不到启动相机并保持活动状态的方法.如果可能,我希望避免开发自定义相机应用程序.

我必须这样做的原因是因为用户通常需要连续拍摄多张照片,而在某些设备上,相机启动时间超过5秒,使用该软件的用户连续拍摄10 - 30张照片; 不仅如此,他们还需要控制各种相机参数.

有没有办法启动相机意图,只有在用户退出相机应用程序后才返回我的活动

camera android

22
推荐指数
1
解决办法
1万
查看次数

使用Cache Uri作为MediaStore.EXTRA_OUTPUT时,相机无法正常工作/保存

我试图从拍摄照片后获得完整的图像Fragment.

如果我使用文件(Uri.fromFile(file))中的Uri,拍摄照片并点击"确定"按钮后相机将不会退出(看起来无法写入Uri或谁知道什么).

使用File String,形式'/data/data/com.package.bla/cache/img198346262jpg',它不能正常工作(文件在那里,但它是空的,因为相机没有保存任何东西).

到目前为止我尝试了什么:

  • 创建文件后删除文件,如本例所示.但是,相机退出后文件不存在.
  • 添加外部存储READ权限,以防万一

所以我不知道为什么图像没有被保存,并且已经花费/浪费了大量时间测试并弄清楚它为什么不起作用.

分段:

private void launchCamera() {
    Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
    File outputDir = getActivity().getCacheDir();
    File file = null;
    try {
        file = File.createTempFile("img", "jpg", outputDir);
    } catch (IOException e) {
        e.printStackTrace();
    }
    if (file != null) {
        mImageUri = Uri.fromFile(file);   //using Uri is not even exiting the camera
        //mImageUri = File.toString();    //If I use String instead of an Uri, it works better …
Run Code Online (Sandbox Code Playgroud)

android android-intent android-camera

21
推荐指数
2
解决办法
1万
查看次数

在Android上获取图像的文件路径

我有一个可以制作图片并上传它们的应用程序.上传需要照片的文件路径,但我无法得到它.

这是我的代码:

public void maakfoto (View v) {

        Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
        cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, mImageCaptureUri);
        startActivityForResult(cameraIntent, CAMERA_REQUEST);

    }

    protected void onActivityResult(int requestCode, int resultCode, Intent data) {  
        if (requestCode == CAMERA_REQUEST && resultCode == RESULT_OK) {  

            Bitmap photo = (Bitmap) data.getExtras().get("data"); 
            imageView.setImageBitmap(photo);
            knop.setVisibility(Button.VISIBLE);
            System.out.println(mImageCaptureUri);
        }  
    }
Run Code Online (Sandbox Code Playgroud)

请帮我看一下文件路径.

谢谢

camera android image path

20
推荐指数
1
解决办法
9万
查看次数

用相机拍照并获取位图

我正在开发一个Android应用程序,它使用前置摄像头为用户模拟镜像.我需要应用程序每隔5秒拍一张照片作为位图(自动且无需用户交互),然后我将其与另一个位图结合使用.

对我来说困难的部分:如何拍照并将其作为位图?

我尝试了几种解决方案,但还没有一种解决方案.

标记为重复的另一个问题是手动而非自动执行此操作.

camera android bitmap

13
推荐指数
3
解决办法
3万
查看次数

如何使用MediaStore在Android Q中保存图像?

这是新的Android Q 范围存储的链接。

根据此Android开发者最佳实践博客storing shared media files(这是我的情况)应使用MediaStore API完成。

深入研究文档,我找不到相关功能。

这是我在科特林的审判:

val bitmap = getImageBitmap() // I have a bitmap from a function or callback or whatever
val name = "example.png" // I have a name

val picturesDirectory = getExternalFilesDir(Environment.DIRECTORY_PICTURES)!!

// Make sure the directory "Android/data/com.mypackage.etc/files/Pictures" exists
if (!picturesDirectory.exists()) {
    picturesDirectory.mkdirs()
}

try {
    val out = FileOutputStream(File(picturesDirectory, name))
    bitmap.compress(Bitmap.CompressFormat.PNG, 100, out)

    out.flush()
    out.close()

} catch(e: Exception) {
    // handle the error
}
Run Code Online (Sandbox Code Playgroud)

结果是,Android/data/com.mypackage.etc/files/Pictures/example.png …

java android image mediastore kotlin

13
推荐指数
3
解决办法
2680
查看次数

Android文件夹的读/写权限

我正在做一个新的Android应用程序.我想在"Android"文件夹中创建一个文件夹,该文件夹在sdcard中可用.在此之前,我想检查该文件夹是否具有读/写权限.我怎么能得到它?任何人都可以帮助我这样做.

android read-write android-sdcard

5
推荐指数
2
解决办法
2万
查看次数

制作照片后,无法从相机接收Intent.extras()

我发现这是捕捉照片和接收全尺寸照片而不是缩略图的常见问题(根据:http://developer.android.com/training/camera/photobasics.html).拍摄照片和接收缩略图很容易,但教程的其余部分似乎不完整且无法正常工作.有人轻松解决了吗?

public class TakePhoto extends Activity{

static final int REQUEST_IMAGE_CAPTURE = 1;
static final int REQUEST_TAKE_PHOTO = 1;
private String mCurrentPhotoPath;
private ImageView mImageView;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.take_photo);

    mImageView = (ImageView) findViewById(R.id.imageView);

    dispatchTakePictureIntent();

}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == REQUEST_TAKE_PHOTO && resultCode == RESULT_OK) {
        Bundle extras = data.getExtras();
        Bitmap imageBitmap = (Bitmap) extras.get("data");
        mImageView.setImageBitmap(imageBitmap);
    }
}

private void dispatchTakePictureIntent() {
    Intent takePictureIntent = …
Run Code Online (Sandbox Code Playgroud)

android android-camera-intent android-bundle

4
推荐指数
1
解决办法
4672
查看次数