拍照后相机不保存
Camera is not saving after taking image
红米1s拍照后不保存。 这在 samsung j5-2016 中效果很好。我正在尝试拍照并上传到服务器。在上传之前我正在压缩图像,所以我需要文件名和文件路径。我如何获得 fileName 显示在 activity 结果方法中。
相机意图
val takePictureIntent = Intent(MediaStore.ACTION_IMAGE_CAPTURE)
if (takePictureIntent.resolveActivity(activity.packageManager) != null) {
startActivityForResult(takePictureIntent, 102)
}
在三星 phone 这会保存图片,因此我可以从 uri 获取文件。但是在 redmi 1s 中我无法获取 uri。我觉得红米 1s 好像没有保存拍照,所以我无法获取文件。
片段中的OnActivityResult显示为:
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
if (requestCode == 102) && resultCode == Activity.RESULT_OK && data != null) {
val uri = data.data
val mimeType = activity.contentResolver.getType(uri)
if (mimeType == null) {
val path = getPath(uri)
if (path == null) {
fileName = FilenameUtils.getName(uri.toString())
} else {
val file = File(path)
fileName = file.getName()
}
} else {
val returnUri = data.getData()
val returnCursor = activity.contentResolver.query(returnUri, null, null, null, null)
val nameIndex = returnCursor.getColumnIndex(OpenableColumns.DISPLAY_NAME)
val sizeIndex = returnCursor.getColumnIndex(OpenableColumns.SIZE)
returnCursor.moveToFirst()
fileName = returnCursor.getString(nameIndex)
val size = Long.toString(returnCursor.getLong(sizeIndex));
}
}
}
我在
中收到 错误
val mimeType = activity.contentResolver.getType(uri)
错误日志
08-23 17:17:52.039 12008-12008/? W/System.err: java.lang.NullPointerException
08-23 17:17:52.039 12008-12008/? W/System.err: at android.content.ContentResolver.acquireExistingProvider(ContentResolver.java:1405)
08-23 17:17:52.039 12008-12008/? W/System.err: at android.content.ContentResolver.getType(ContentResolver.java:304)
08-23 17:17:52.039 12008-12008/? W/System.err: at in.motiontech.wave.fragment.ReviewOrderFragment.onActivityResult(ReviewOrderFragment.kt:396)
08-23 17:17:52.039 12008-12008/? W/System.err: at android.support.v4.app.FragmentActivity.onActivityResult(FragmentActivity.java:164)
08-23 17:17:52.039 12008-12008/? W/System.err: at android.app.Activity.dispatchActivityResult(Activity.java:5434)
08-23 17:17:52.039 12008-12008/? W/System.err: at android.app.ActivityThread.deliverResults(ActivityThread.java:3363)
08-23 17:17:52.039 12008-12008/? W/System.err: at android.app.ActivityThread.handleSendResult(ActivityThread.java:3410)
08-23 17:17:52.039 12008-12008/? W/System.err: at android.app.ActivityThread.access00(ActivityThread.java:141)
08-23 17:17:52.039 12008-12008/? W/System.err: at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1260)
08-23 17:17:52.039 12008-12008/? W/System.err: at android.os.Handler.dispatchMessage(Handler.java:102)
08-23 17:17:52.039 12008-12008/? W/System.err: at android.os.Looper.loop(Looper.java:136)
08-23 17:17:52.049 12008-12008/? W/System.err: at android.app.ActivityThread.main(ActivityThread.java:5052)
08-23 17:17:52.049 12008-12008/? W/System.err: at java.lang.reflect.Method.invokeNative(Native Method)
08-23 17:17:52.049 12008-12008/? W/System.err: at java.lang.reflect.Method.invoke(Method.java:515)
08-23 17:17:52.049 12008-12008/? W/System.err: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:796)
08-23 17:17:52.049 12008-12008/? W/System.err: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:612)
08-23 17:17:52.049 12008-12008/? W/System.err: at dalvik.system.NativeStart.main(Native Method)
如果我做错了什么请帮助我,请提出其他选择。
我也查看了一些 Whosebug 帖子,但找不到答案:
Camera Intent not saving photo
Camera is not saving after taking picture
Can not save camera's captured photo in application's "files" folder
编辑
我还尝试关注 Camera Intent
val takePictureIntent = Intent(MediaStore.ACTION_IMAGE_CAPTURE)
val dir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM)
var output = File(dir, System.currentTimeMillis().toString() + ".jpeg")
if (takePictureIntent.resolveActivity(activity.packageManager) != null) {
takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, output)
startActivityForResult(takePictureIntent, 102)
}
Camera is not saving after taking image in Redmi 1s.
它不会 "save" 大多数相机应用程序。您专门设置 ACTION_IMAGE_CAPTURE
Intent
不在任何地方保存照片。
This works great in samsung j5-2016
只是因为您在该设备上使用有问题的相机应用程序。
ACTION_IMAGE_CAPTURE
不应该 return 一个 Uri
。它应该做两件事之一:
如果您在 ACTION_IMAGE_CAPTURE
Intent
中包含 EXTRA_OUTPUT
,相机应用应该会将全分辨率照片保存到 Uri
你在额外的
中提供的
否则,您会在 returned Intent
上通过 getParcelableExtra("data")
返回 Bitmap
由于您没有 EXTRA_OUTPUT
,因此您不应期望将全分辨率照片保存在任何地方。
This sample app 显示如何使用 EXTRA_OUTPUT
.
红米1s拍照后不保存。 这在 samsung j5-2016 中效果很好。我正在尝试拍照并上传到服务器。在上传之前我正在压缩图像,所以我需要文件名和文件路径。我如何获得 fileName 显示在 activity 结果方法中。
相机意图
val takePictureIntent = Intent(MediaStore.ACTION_IMAGE_CAPTURE)
if (takePictureIntent.resolveActivity(activity.packageManager) != null) {
startActivityForResult(takePictureIntent, 102)
}
在三星 phone 这会保存图片,因此我可以从 uri 获取文件。但是在 redmi 1s 中我无法获取 uri。我觉得红米 1s 好像没有保存拍照,所以我无法获取文件。 片段中的OnActivityResult显示为:
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
if (requestCode == 102) && resultCode == Activity.RESULT_OK && data != null) {
val uri = data.data
val mimeType = activity.contentResolver.getType(uri)
if (mimeType == null) {
val path = getPath(uri)
if (path == null) {
fileName = FilenameUtils.getName(uri.toString())
} else {
val file = File(path)
fileName = file.getName()
}
} else {
val returnUri = data.getData()
val returnCursor = activity.contentResolver.query(returnUri, null, null, null, null)
val nameIndex = returnCursor.getColumnIndex(OpenableColumns.DISPLAY_NAME)
val sizeIndex = returnCursor.getColumnIndex(OpenableColumns.SIZE)
returnCursor.moveToFirst()
fileName = returnCursor.getString(nameIndex)
val size = Long.toString(returnCursor.getLong(sizeIndex));
}
}
}
我在
中收到 错误val mimeType = activity.contentResolver.getType(uri)
错误日志
08-23 17:17:52.039 12008-12008/? W/System.err: java.lang.NullPointerException
08-23 17:17:52.039 12008-12008/? W/System.err: at android.content.ContentResolver.acquireExistingProvider(ContentResolver.java:1405)
08-23 17:17:52.039 12008-12008/? W/System.err: at android.content.ContentResolver.getType(ContentResolver.java:304)
08-23 17:17:52.039 12008-12008/? W/System.err: at in.motiontech.wave.fragment.ReviewOrderFragment.onActivityResult(ReviewOrderFragment.kt:396)
08-23 17:17:52.039 12008-12008/? W/System.err: at android.support.v4.app.FragmentActivity.onActivityResult(FragmentActivity.java:164)
08-23 17:17:52.039 12008-12008/? W/System.err: at android.app.Activity.dispatchActivityResult(Activity.java:5434)
08-23 17:17:52.039 12008-12008/? W/System.err: at android.app.ActivityThread.deliverResults(ActivityThread.java:3363)
08-23 17:17:52.039 12008-12008/? W/System.err: at android.app.ActivityThread.handleSendResult(ActivityThread.java:3410)
08-23 17:17:52.039 12008-12008/? W/System.err: at android.app.ActivityThread.access00(ActivityThread.java:141)
08-23 17:17:52.039 12008-12008/? W/System.err: at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1260)
08-23 17:17:52.039 12008-12008/? W/System.err: at android.os.Handler.dispatchMessage(Handler.java:102)
08-23 17:17:52.039 12008-12008/? W/System.err: at android.os.Looper.loop(Looper.java:136)
08-23 17:17:52.049 12008-12008/? W/System.err: at android.app.ActivityThread.main(ActivityThread.java:5052)
08-23 17:17:52.049 12008-12008/? W/System.err: at java.lang.reflect.Method.invokeNative(Native Method)
08-23 17:17:52.049 12008-12008/? W/System.err: at java.lang.reflect.Method.invoke(Method.java:515)
08-23 17:17:52.049 12008-12008/? W/System.err: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:796)
08-23 17:17:52.049 12008-12008/? W/System.err: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:612)
08-23 17:17:52.049 12008-12008/? W/System.err: at dalvik.system.NativeStart.main(Native Method)
如果我做错了什么请帮助我,请提出其他选择。
我也查看了一些 Whosebug 帖子,但找不到答案:
Camera Intent not saving photo
Camera is not saving after taking picture
Can not save camera's captured photo in application's "files" folder
编辑 我还尝试关注 Camera Intent
val takePictureIntent = Intent(MediaStore.ACTION_IMAGE_CAPTURE)
val dir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM)
var output = File(dir, System.currentTimeMillis().toString() + ".jpeg")
if (takePictureIntent.resolveActivity(activity.packageManager) != null) {
takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, output)
startActivityForResult(takePictureIntent, 102)
}
Camera is not saving after taking image in Redmi 1s.
它不会 "save" 大多数相机应用程序。您专门设置 ACTION_IMAGE_CAPTURE
Intent
不在任何地方保存照片。
This works great in samsung j5-2016
只是因为您在该设备上使用有问题的相机应用程序。
ACTION_IMAGE_CAPTURE
不应该 return 一个 Uri
。它应该做两件事之一:
如果您在
ACTION_IMAGE_CAPTURE
Intent
中包含EXTRA_OUTPUT
,相机应用应该会将全分辨率照片保存到Uri
你在额外的 中提供的
否则,您会在 returned
Intent
上通过
getParcelableExtra("data")
返回 Bitmap
由于您没有 EXTRA_OUTPUT
,因此您不应期望将全分辨率照片保存在任何地方。
This sample app 显示如何使用 EXTRA_OUTPUT
.