Android - 如何从片段中选择和显示图像?
Android - How can I choose and display image from within fragment?
我一直在尝试选择并在我的片段上显示图像,但它似乎不起作用。
我下面的代码启动并带我到我的画廊,但是当我点击图片时,我的应用程序崩溃并给我一个错误:
Bitmap bitmap = MediaStore.Images.Media.getBitmap(getActivity().getContentResolver(), uri);
错误:
java.lang.RuntimeException: Failure delivering result
ResultInfo{who=null, request=131073, result=-1, data=Intent {
dat=content://media/external/images/media/19394 (has extras) }} to
activity {com.mycompany.e_planner/com.mycompany.e_planner.MyActivity}:
java.lang.SecurityException: Permission Denial: reading
com.android.providers.media.MediaProvider uri
content://media/external/images/media/19394 from pid=29204, uid=10011
requires android.permission.READ_EXTERNAL_STORAGE, or
grantUriPermission()
这是我的代码:
public class Venue1 extends Fragment {
private int PICK_IMAGE_REQUEST = 1;
public Venue1() {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View V = inflater.inflate(R.layout.fragment_venue1, container, false);
Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(Intent.createChooser(intent, "Select Picture"), PICK_IMAGE_REQUEST);
return V;
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == PICK_IMAGE_REQUEST && resultCode == Activity.RESULT_OK && data != null && data.getData() != null) {
Uri uri = data.getData();
try {
Bitmap bitmap = MediaStore.Images.Media.getBitmap(getActivity().getContentResolver(), uri);
// Log.d(TAG, String.valueOf(bitmap));
ImageView imageView = (ImageView)getActivity().findViewById(R.id.imageView);
imageView.setImageBitmap(bitmap);
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
好吧,这个错误很容易解释。您需要请求权限 android.permission.READ_EXTERNAL_STORAGE
。只需将它添加到您的 manifest file.
在清单文件中添加读取外部存储的权限
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
我一直在尝试选择并在我的片段上显示图像,但它似乎不起作用。
我下面的代码启动并带我到我的画廊,但是当我点击图片时,我的应用程序崩溃并给我一个错误:
Bitmap bitmap = MediaStore.Images.Media.getBitmap(getActivity().getContentResolver(), uri);
错误:
java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=131073, result=-1, data=Intent { dat=content://media/external/images/media/19394 (has extras) }} to activity {com.mycompany.e_planner/com.mycompany.e_planner.MyActivity}: java.lang.SecurityException: Permission Denial: reading com.android.providers.media.MediaProvider uri content://media/external/images/media/19394 from pid=29204, uid=10011 requires android.permission.READ_EXTERNAL_STORAGE, or grantUriPermission()
这是我的代码:
public class Venue1 extends Fragment {
private int PICK_IMAGE_REQUEST = 1;
public Venue1() {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View V = inflater.inflate(R.layout.fragment_venue1, container, false);
Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(Intent.createChooser(intent, "Select Picture"), PICK_IMAGE_REQUEST);
return V;
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == PICK_IMAGE_REQUEST && resultCode == Activity.RESULT_OK && data != null && data.getData() != null) {
Uri uri = data.getData();
try {
Bitmap bitmap = MediaStore.Images.Media.getBitmap(getActivity().getContentResolver(), uri);
// Log.d(TAG, String.valueOf(bitmap));
ImageView imageView = (ImageView)getActivity().findViewById(R.id.imageView);
imageView.setImageBitmap(bitmap);
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
好吧,这个错误很容易解释。您需要请求权限 android.permission.READ_EXTERNAL_STORAGE
。只需将它添加到您的 manifest file.
在清单文件中添加读取外部存储的权限
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>