我使用以下链接在我的应用中集成相机
https://developer.android.com/training/camera/photobasics.html#TaskScalePhoto
我按照每一步操作,但每次尝试从相机拍照时都会出现以下错误,并且会弹出一个对话框,显示“很遗憾,相机已停止。”
错误:
W / ContextImpl:无法确保目录:/ storage / extSdCard /Android/data/com.example.daf.formvalidator/files/PicturesE / OpenGLRenderer:SFEffectCache:clear(),mSize = 0
对我来说奇怪的是,以下代码(取自上面的链接)在storageDir的值中返回“/ emulated / 0” 以上错误显示“extSdCard”
//返回 /storage/emulated/0/Android/data/com.example.daf.formvalidator/files/Pictures /
File storageDir = getActivity().getExternalFilesDir(Environment.DIRECTORY_PICTURES);
我想要什么?
- 开启相机应用程序。
- 将照片存储到应用的专用存储空间,如链接中所述。
- 想要使用FileProvider
我也试过在意图上设置标志,例如:
takePictureIntent.setFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
我无法找到问题并花了将近1天的时间来找到问题。 请提供任何形式的帮助。我们将不胜感激。
为什么“storageDir的值”和错误消息之间存在差异?
如果问题不明确,请建议......
答案 0 :(得分:0)
尝试将此权限添加到您的清单中:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
答案 1 :(得分:0)
如果您使用的是Google开发人员的示例,请尝试将您的文件放入自定义目录:
template <typename Arg1>
void trace(const char* name, Arg1&& arg1){
cout << name << " : " << arg1 << endl;
}
答案 2 :(得分:0)
所以你想:
打开相机应用程序。
将拍摄的照片存储到应用的私人存储空间,如链接中所述。
想要使用FileProvider
我要提到的第一件事是,您发布的错误根本不是错误。这是一个警告,你应该可以忽略它。我认为这个警告意味着他们无法判断目录是否存在(这与链接有关,我将在一秒钟之内谈论)。你可以为你的例外发布实际的堆栈跟踪吗?听起来这不是你的问题。
从您的帖子中发现的另一件事是,您听起来像是在混淆私人存储空间和SD卡。根据定义,SD卡上的文件不是私有存储。有关您的选项的详细说明,请参阅此处:https://developer.android.com/guide/topics/data/data-storage.html#filesInternal
具体来说,您要注意您正在做的是保存到SD卡,根据定义,它不是内部(或私人)存储。
至于&#34; / storage / emulated / 0 /&#34;之间的区别和&#34; / storage / sdcard /&#34;,它们都应指向同一目录。简短版本是自Android L以来,Android支持多个用户。 &#34;模拟/ 0&#34;只是指向主用户存储目录的链接。我在这里感兴趣的是,通常当我听到&#39;模仿/ 0&#39;它是在内部存储的背景下,但我不明白为什么它不能&#39 ; t也链接到SD卡。