gpt4 book ai didi

java - 应用程序会拍照,但不会保存

转载 作者:行者123 更新时间:2023-11-30 04:56:04 25 4
gpt4 key购买 nike

我正在尝试拍照并将其保存为 jpeg。供您引用,如果有帮助,这是用户将访问的程序中的第三个 Activity ,我希望将图片保存到 data/user/0/com.example.app/appdata/inv/inv_pics文件。这是我所拥有的:


static String currentPhotoPath;

private File createImageFile() throws IOException {
// Create an image file name
String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
String imageFileName = "JPEG_" + timeStamp + "_";
File storageDir = new File (MainActivity.path+"/com.example.app/appdata/inv/inv_pics");
storageDir.mkdir();
File image = File.createTempFile(
imageFileName, /* prefix */
".jpg", /* suffix */
storageDir /* directory */
);

// Save a file: path for use with ACTION_VIEW intents
currentPhotoPath = image.getAbsolutePath();
return image;
}

private void dispatchTakePictureIntent() {
Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
// Ensure that there's a camera activity to handle the intent
if (takePictureIntent.resolveActivity(getPackageManager()) != null) {
// Create the File where the photo should go
File photoFile = null;
try {
photoFile = createImageFile();
} catch (IOException ex) {
ex.printStackTrace();
// Error occurred while creating the File
}
// Continue only if the File was successfully created
if (photoFile != null) {
Uri photoURI = Uri.parse((MainActivity.path+"/com.example.app/appdata/inv/inv_pics"));
takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, photoURI);
startActivityForResult(takePictureIntent, REQUEST_TAKE_PHOTO);
}
}
}

我松散地关注 this tutorial .我在我的 list 文件中做了同样的事情,并创建了额外的 file_paths xml 文件。我让第二种方法 (photoURI) 中的 Uri 准确地设置了该方法的方式,并使用教程中的参数。这只是产生了错误,所以我基本上将文件路径硬编码到我的应用程序中(我知道这不是“OOP”),现在代码几乎可以工作了。

当我运行应用程序并进入 Activity 时,它会打开相机。那太棒了。我单击按钮拍照,屏幕卡住了一秒钟,但没有给我底部的“重试”或“确定”按钮 - 预期结果。

理想功能(同样,供您引用):

参加这个 Activity 。它打开一个相机。 (我在这里。)当我拍照时,它会问我“重试”或“确定”(如上所述。)如果我单击“确定”,文件名将被写入一个文本文件,稍后将被写入读取以将图片设置为 Image Button 上的图像。

提前致谢!

编辑:

我不认为这是权限问题,a) 我在 list 中声明了权限,并且 b) 第一种方法确实创建了文件,它只是空白,这让我知道代码至少运行到第二种方法中的 photoFile = createImageFile();

因为我知道你可能会问,下面是当我尝试使用教程提供的代码时出现的错误:

    Process: com.example.app, PID: 4700
java.lang.IllegalArgumentException: Failed to find configured root that contains /storage/emulated/0/Android/data/com.example.app/files/Pictures/JPEG_20191201_235937_8382995102420149896.jpg
at androidx.core.content.FileProvider$SimplePathStrategy.getUriForFile(FileProvider.java:739)
at androidx.core.content.FileProvider.getUriForFile(FileProvider.java:418)
at com.erthad.boutique.InventoryActivity2.dispatchTakePictureIntent(InventoryActivity2.java:59)
at com.erthad.boutique.InventoryActivity2.access$000(InventoryActivity2.java:21)
at com.erthad.boutique.InventoryActivity2$1.onClick(InventoryActivity2.java:82)
at android.view.View.performClick(View.java:7341)
at android.view.View.performClickInternal(View.java:7307)
at android.view.View.access$3200(View.java:846)
at android.view.View$PerformClick.run(View.java:27796)
at android.os.Handler.handleCallback(Handler.java:873)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:214)
at android.app.ActivityThread.main(ActivityThread.java:7156)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:494)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:975)```

最佳答案

使用Base64将图片作为String获取:

从内部读取

public StringBuilder fromInternal(String filename) {

StringBuilder sb = new StringBuilder();
try {

FileInputStream fileInputStream = context.openFileInput(filename);
InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream, "UTF-8");
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
String line;
while ((line = bufferedReader.readLine()) != null) {
sb.append(line);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}

return sb;
}

将文件保存到内部:

    public void toInternal(String data,String sFileName){

File file = new File(Environment.getExternalStorageDirectory()+"/"+sFileName);
byte[] bytes = data.getBytes();
OutputStream outputStream = null;
try {
outputStream = new FileOutputStream(file);
outputStream.write(bytes);
outputStream.close();

} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}

}

并将此权限添加到您的 AndroidManifest.xml

 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

关于java - 应用程序会拍照,但不会保存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59133929/

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