【问题标题】:Access photo library - Android application访问照片库 - Android 应用程序
【发布时间】:2015-01-06 22:47:34
【问题描述】:

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

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>

【问题讨论】:

标签: java android eclipse android-studio


【解决方案1】:

当我阅读您的问题时,我了解到您正在尝试使用相机拍摄照片并将其设置为 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);
        }  

【讨论】:

  • 我的代码访问移动图像库,图像存在于内存中。我的问题是,当我访问手机上的照片库时,我选择的任何图片都会更新 ImageView,但相机拍摄的照片除外。如果你运行我的代码就会完全理解。谢谢你。 @Prem
【解决方案2】:

如果我猜对了,您正在尝试用您的设备相机拍照并在您的应用程序中使用该照片,那么网上有很多用于此目的的示例,但在这里我会给您一些我认为很容易的东西至少要了解我认为这里是代码: 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);
    }
}

给你,最简单的我能找到希望它对你有用。 祝你好运

【讨论】:

  • 我的代码访问移动图像库,图像存在于内存中。我的问题是,当我访问手机上的照片库时,我选择的任何图片都会更新 ImageView,但相机拍摄的照片除外。如果你运行我的代码就会完全理解。谢谢你。 @Ahmad Alsanie
猜你喜欢
  • 1970-01-01
  • 2013-08-06
  • 2017-04-24
  • 2013-10-17
  • 1970-01-01
  • 2017-10-12
  • 1970-01-01
  • 2015-10-31
相关资源
最近更新 更多