当我尝试打开文件时,应用程序崩溃了.它可以在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代替.但是,我的应用程序需要打开根目录中的文件.有任何想法吗?
我知道这有许多不同的方式,但我似乎无法从默认文件夹中删除图库图像.我正确地将文件保存到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) 我正在尝试使用通过intent(MediaStore.ACTION_IMAGE_CAPTURE)启动的默认设备相机应用程序拍摄多张照片.使用我正在测试的设备,相机启动,拍照,要求确认,然后返回到我处理结果的活动.
我考虑过使用广播接收器回调或内容观察者; 但是,在用户完成之前,我找不到启动相机并保持活动状态的方法.如果可能,我希望避免开发自定义相机应用程序.
我必须这样做的原因是因为用户通常需要连续拍摄多张照片,而在某些设备上,相机启动时间超过5秒,使用该软件的用户连续拍摄10 - 30张照片; 不仅如此,他们还需要控制各种相机参数.
有没有办法启动相机意图,只有在用户退出相机应用程序后才返回我的活动?
我试图从拍摄照片后获得完整的图像Fragment.
如果我使用文件(Uri.fromFile(file))中的Uri,拍摄照片并点击"确定"按钮后相机将不会退出(看起来无法写入Uri或谁知道什么).
使用File String,形式'/data/data/com.package.bla/cache/img198346262jpg',它不能正常工作(文件在那里,但它是空的,因为相机没有保存任何东西).
到目前为止我尝试了什么:
所以我不知道为什么图像没有被保存,并且已经花费/浪费了大量时间测试并弄清楚它为什么不起作用.
分段:
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) 我有一个可以制作图片并上传它们的应用程序.上传需要照片的文件路径,但我无法得到它.
这是我的代码:
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)
请帮我看一下文件路径.
谢谢
我正在开发一个Android应用程序,它使用前置摄像头为用户模拟镜像.我需要应用程序每隔5秒拍一张照片作为位图(自动且无需用户交互),然后我将其与另一个位图结合使用.
对我来说困难的部分:如何拍照并将其作为位图?
我尝试了几种解决方案,但还没有一种解决方案.
标记为重复的另一个问题是手动而非自动执行此操作.
这是新的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 …
我正在做一个新的Android应用程序.我想在"Android"文件夹中创建一个文件夹,该文件夹在sdcard中可用.在此之前,我想检查该文件夹是否具有读/写权限.我怎么能得到它?任何人都可以帮助我这样做.
我发现这是捕捉照片和接收全尺寸照片而不是缩略图的常见问题(根据: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 ×9
camera ×3
image ×3
android-file ×1
bitmap ×1
java ×1
kotlin ×1
mediastore ×1
path ×1
read-write ×1