访问照片库 - Android应用程序

时间:2015-01-06 22:47:34

标签: java android eclipse android-studio

我正在开发一个应用程序来访问移动照片库并在选择后上传图片。应用程序正在加载所有照片,但相机拍摄的照片除外。 有人可能会帮我吗?

MainActivity.java

import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.view.View;
import android.widget.ImageView;

import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;


public class MainActivity extends ActionBarActivity {

ImageView img;
private Bitmap bitmap;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    img = (ImageView) findViewById(R.id.imageView);
    img.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            abrirFoto();
        }

    });
}

public void abrirFoto() {
    Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
    intent.setType("image/*");
    intent.addCategory(Intent.CATEGORY_OPENABLE);
    startActivityForResult(intent, 1);
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    InputStream stream = null;
    if (requestCode == 1 && resultCode == RESULT_OK) {
        try {
            if (bitmap != null) {
                bitmap.recycle();
            }
            stream = getContentResolver().openInputStream(data.getData());
            bitmap = BitmapFactory.decodeStream(stream);
            img.setImageBitmap(bitmap);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } finally {
            if (stream != null)
                try {
                    stream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
        }

    }
}
}

activity_main.xml中

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity"
android:background="#0B9AE2">

<ImageView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/imageView"
    android:src="@drawable/fotos1"
    android:layout_centerVertical="true"
    android:layout_centerHorizontal="true"
    android:layout_weight = "1"/>

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textAppearance="?android:attr/textAppearanceMedium"
    android:text="Clique para acessar as fotos do celular"
    android:id="@+id/textView2"
    android:layout_centerHorizontal="true"
    android:layout_weight = "1"/>

</RelativeLayout>

2 个答案:

答案 0 :(得分:0)

当我阅读你的问题时,我知道你正在尝试使用相机拍摄照片并尝试将其设置为imageview。如果我错了,请纠正我。

要从相机上传图片,您必须尝试不同的意图。

Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
startActivityForResult(cameraIntent, CAMERA_REQUEST); 

在onActivityResult方法中,添加以下代码行。

if (requestCode == CAMERA_REQUEST && resultCode == RESULT_OK) {  
            Bitmap photo = (Bitmap) data.getExtras().get("data"); 
            img.setImageBitmap(photo);
        }  

答案 1 :(得分:0)

如果我做得对,你试图用你的设备相机拍照并在你的应用程序中使用那张照片,那么网上有很多例子用于那个目的但是在这里我会给你一些我认为的东西很容易理解至少我认为这里是代码: 1 - 将它们定义为全局变量:

Intent i;
final static int cameraData=0; 
Bitmap bmp;

2 - 在你的点击方法或你用来拍照的方法中使用这个:

i=new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
        startActivityForResult(i,cameraData);

3调用onActivityResult()方法:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    // TODO Auto-generated method stub
    super.onActivityResult(requestCode, resultCode, data);
    if(resultCode == RESULT_OK){
        Bundle extras=data.getExtras();
        bmp = (Bitmap) extras.get("data");
        iv.setImageBitmap(bmp);
    }
}

在这里,你最简单,我希望它能为你效劳。 祝你好运