裁剪照片时出现 FileNotFoundException

发布于 2024-09-04 12:32:56 字数 828 浏览 8 评论 0原文

我正在尝试裁剪照片以在动态壁纸中使用,但当裁剪活动尝试保存新的裁剪图像时,我收到 FileNotFoundException。这是我正在使用的代码:

File file = new File(getFilesDir(), "wallpaper.jpg");

Intent intent = new Intent("com.android.camera.action.CROP");
intent.setData(uri);

DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);

intent.putExtra("outputX", metrics.widthPixels * 2);
intent.putExtra("outputY", metrics.heightPixels);
intent.putExtra("aspectX", metrics.widthPixels * 2);
intent.putExtra("aspectY", metrics.heightPixels);
intent.putExtra("scale", true);
intent.putExtra("noFaceDetection", true);
intent.putExtra("output", Uri.parse("file:/" + file.getAbsolutePath()));

startActivityForResult(intent, REQUEST_CROP_IMAGE);

wallpaper.jpg 文件似乎存在于 DDMS 文件资源管理器中,所以我不确定我做错了什么。非常感谢任何建议。

I'm trying to crop a photo to use in a Live Wallpaper but I'm getting a FileNotFoundException when the crop activity tries to save my new cropped image. This is the code I'm using:

File file = new File(getFilesDir(), "wallpaper.jpg");

Intent intent = new Intent("com.android.camera.action.CROP");
intent.setData(uri);

DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);

intent.putExtra("outputX", metrics.widthPixels * 2);
intent.putExtra("outputY", metrics.heightPixels);
intent.putExtra("aspectX", metrics.widthPixels * 2);
intent.putExtra("aspectY", metrics.heightPixels);
intent.putExtra("scale", true);
intent.putExtra("noFaceDetection", true);
intent.putExtra("output", Uri.parse("file:/" + file.getAbsolutePath()));

startActivityForResult(intent, REQUEST_CROP_IMAGE);

The wallpaper.jpg file seems to exist on DDMS file explorer so I'm not sure what I'm doing wrong. Any advice is greatly appreciated.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

雅心素梦 2024-09-11 12:32:57

getFilesDir() 返回应用程序的私有目录。相机无法访问您的私人目录。要使相机可以访问壁纸.jpg,请将其放置在某个 publix 文件夹中。例如,就像Alex所说的,它可以是sd卡root。固定代码是:

File file = new File(Environment.getExternalStorageDirectory(),  "wallpaper.jpg");

getFilesDir() return your application's privte directory. Camera can't access your private directory. To make wallpaper.jpg accessible by Camera place it in some publix folder. For example like Alex said it can be sd card root. The fixed code would be:

File file = new File(Environment.getExternalStorageDirectory(),  "wallpaper.jpg");
夜无邪 2024-09-11 12:32:57

http://developer.android.com/guide/topics/数据/data-storage.html#filesExternal

如果您使用的是 API 级别 7 或更低版本,
使用 getExternalStorageDirectory() 来
打开一个代表根的文件
外部存储。那么你应该
在下面写下您的数据
目录:

/Android/数据//文件/
这是你的Java风格
包名,例如
“com.example.android.app”。如果
用户的设备正在运行 API 级别 8
或更高,他们会卸载您的
应用程序,此目录和所有
其内容将被删除。

http://developer.android.com/guide/topics/data/data-storage.html#filesExternal

If you're using API Level 7 or lower,
use getExternalStorageDirectory(), to
open a File representing the root of
the external storage. You should then
write your data in the following
directory:

/Android/data//files/
The is your Java-style
package name, such as
"com.example.android.app". If the
user's device is running API Level 8
or greater and they uninstall your
application, this directory and all
its contents will be deleted.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文