如何从手机的照片库访问图像?

You*_*Kim 19 android android-gallery

任何机会,有谁知道如何访问手机的照片库?我正在制作一个应用程序,用于拍摄植物叶片并分析图像以确定是否确定.我们希望我们可以为用户提供两种选择,即拍摄叶子的图片或使用用户已经拍摄的叶子图像.但是,我们拍摄了照片,但我们不知道如何访问照片库.

K_A*_*nas 38

您必须使用内置功能启动Gallery App Intents.之后,在您的上onActivityResult(),获取所选图像的路径并将图像加载到您的图像中ImageView

main.xml中

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:orientation="vertical"
 android:layout_width="fill_parent"
 android:layout_height="fill_parent"
 >
<TextView
 android:layout_width="fill_parent"
 android:layout_height="wrap_content"
 android:text="@string/hello"
 />
<Button
 android:id="@+id/loadimage"
 android:layout_width="fill_parent"
 android:layout_height="wrap_content"
 android:text="Load Image"
 />
<TextView
 android:id="@+id/targeturi"
 android:layout_width="fill_parent"
 android:layout_height="wrap_content"
 />
<ImageView
 android:id="@+id/targetimage"
 android:layout_width="fill_parent"
 android:layout_height="fill_parent"
 />
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)

你的活动

 package com.exercise.AndroidSelectImage;

    import java.io.FileNotFoundException;

    import android.app.Activity;
    import android.content.Intent;
    import android.graphics.Bitmap;
    import android.graphics.BitmapFactory;
    import android.net.Uri;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.Button;
    import android.widget.ImageView;
    import android.widget.TextView;

    public class AndroidSelectImage extends Activity {

    TextView textTargetUri;
    ImageView targetImage;

     /** Called when the activity is first created. */
     @Override
     public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.main);
         Button buttonLoadImage = (Button)findViewById(R.id.loadimage);
         textTargetUri = (TextView)findViewById(R.id.targeturi);
         targetImage = (ImageView)findViewById(R.id.targetimage);

         buttonLoadImage.setOnClickListener(new Button.OnClickListener(){

     @Override
     public void onClick(View arg0) {
      // TODO Auto-generated method stub
      Intent intent = new Intent(Intent.ACTION_PICK,
        android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
      startActivityForResult(intent, 0);
     }});
     }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    // TODO Auto-generated method stub
    super.onActivityResult(requestCode, resultCode, data);

    if (resultCode == RESULT_OK){
     Uri targetUri = data.getData();
     textTargetUri.setText(targetUri.toString());
     Bitmap bitmap;
     try {
      bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(targetUri));
      targetImage.setImageBitmap(bitmap);
     } catch (FileNotFoundException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
     }
    }
    }
    }
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述


154*_*12s 17

不要忘记将以下权限添加到AndroidManifest.xml:

<uses-permission android:name="android.permission.MANAGE_DOCUMENTS" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
Run Code Online (Sandbox Code Playgroud)

  • 仅当您还没有WRITE_EXTERNAL_STORAGE时,才需要READ_EXTERNAL_STORAGE。您确定MANAGE_DOCUMENTS是否合理?https://developer.android.com/reference/android/Manifest.permission.html说:“此权限仅应由平台文档管理应用程序请求。不能将此权限授予第三方应用程序。” (2认同)