我无法通过手机拍摄正常的照片。当我从画廊中选择截图时,一切正常,但是当它正常拍照时,它没有返回任何内容。我会给你一些代码部分,你可以看到我是如何获得图片的。
@Override
public void onActivityResult(int reqCode, int resultCode, final Intent data) {
super.onActivityResult(reqCode, resultCode, data);
if (reqCode == PICK_IMAGE && resultCode == Activity.RESULT_OK) {
final Uri imageUri = data.getData();
final String path = getPath(getActivity(), imageUri);
if (path != null) {
try {
File f1 = new File(path);
final AsyncHttpClient client = new AsyncHttpClient(true, 80, 443);
client.addHeader("accept", "application/json");
final RequestParams params = new RequestParams();
params.put("id", id);
params.put("token", token);
params.put("avatar", f1);
还有这个
add_avatar.setOnClickListener(new View.OnClickListener() {
@TargetApi(Build.VERSION_CODES.M)
@Override
public void onClick(View view) {
// filePickUtils.requestImageGallery(STORAGE_PERMISSION_IMAGE, true, true);
if (getActivity().checkSelfPermission(android.Manifest.permission.READ_EXTERNAL_STORAGE)
!= PackageManager.PERMISSION_GRANTED) {
// Should we show an explanation?
if (shouldShowRequestPermissionRationale(
android.Manifest.permission.READ_EXTERNAL_STORAGE)) {
// Explain to the user why we need to read the contacts
}
requestPermissions(new String[]{android.Manifest.permission.READ_EXTERNAL_STORAGE},
1);
// MY_PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE is an
// app-defined int constant that should be quite unique
return;
}
if (getActivity().checkSelfPermission(android.Manifest.permission.WRITE_EXTERNAL_STORAGE)
!= PackageManager.PERMISSION_GRANTED) {
// Should we show an explanation?
if (shouldShowRequestPermissionRationale(
android.Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
// Explain to the user why we need to read the contacts
}
requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
1);
// MY_PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE is an
// app-defined int constant that should be quite unique
return;
}
Intent photoPickerIntent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
photoPickerIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
photoPickerIntent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
photoPickerIntent.setType("image/*");
startActivityForResult(photoPickerIntent, PICK_IMAGE);
}
});
你会建议什么?
感谢您的帮助
答案 0 :(得分:0)
鉴于您只需要阅读图片并将数据上传到后端服务器,我建议您使用Intent.ACTION_GET_CONTENT
代替Intent.ACTION_PICK
。
<强>为什么强>
您的问题可能与Intent.ACTION_PICK
需要的内容有关。文件说明:
输入:getData()是包含数据目录(vnd.android.cursor.dir / *)的URI,用于从中选择项目。
所以这意味着,如果你想使用Intent.ACTION_PICK
,你需要提供数据目录。
同时,如果您使用Intent.ACTION_GET_CONTENT
,则只需设置要搜索的文件的MIME类型(就像您现在所做的那样),并使用Context.startActivity(intent)
。
您可能希望阅读的文档中的其他说明:
输入:
getType()
是要检索的所需MIME类型。请注意,intent中没有提供URI,因为对返回的数据最初来自何处没有限制。如果您只能接受可以作为流打开的数据,则还可以包含CATEGORY_OPENABLE
。您可以使用EXTRA_LOCAL_ONLY
将内容选择限制为本地数据。您可以使用EXTRA_ALLOW_MULTIPLE
来允许用户选择多个项目。输出:已挑选项目的URI。这必须是
content:
URI,以便任何接收者都可以访问它。
如果您需要更多信息,请在此处添加评论。
示例代码:
在您的活动中
private searchImageFile() {
Intent intent = new Intent(Intent.GET_CONTENT);
// Filter to only show results that can be "opened"
intent.addCategory(Intent.CATEGORY_OPENABLE);
// Filter to show only images, using the image MIME data type.
// it would be "*/*".
intent.setType("image/*");
startActivityForResult(intent, READ_REQUEST_CODE);
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent resultData) {
if (requestCode == READ_REQUEST_CODE && resultCode == Activity.RESULT_OK) {
final Uri imageUri = resultData.getData();
//Do something with your Uri.
}
}