Kann jemand zufällig auf die Fotogalerie des Telefons zugreifen? Ich mache eine Anwendung, die ein Bild von einem Pflanzenblatt macht und analysiert das Bild, um festzustellen, ob es bestimmt ist oder nicht. Wir hofften, dass wir dem Benutzer zwei Möglichkeiten geben könnten, das Bild des Blattes zu machen oder ein Bild eines Blattes zu verwenden, das der Benutzer bereits genommen hat. Wie auch immer, wir haben das Bild gemacht, aber wir wissen nicht, wie man auf die Fotogalerie zugreifen kann.Wie kann ich auf ein Bild von der Fotogalerie des Telefons zugreifen?
17
A
Antwort
32
Sie müssen die Gallery App mit dem integrierten Intents
starten. Danach wird auf Ihrem onActivityResult()
, den Pfad des ausgewählten Bildes erhalten und laden Sie Ihr Bild in Ihrem 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>
Ihre Aktivität
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();
}
}
}
}
14
Do Vergessen Sie nicht, die folgenden Berechtigungen zu AndroidManifest.xml hinzuzufügen:
<uses-permission android:name="android.permission.MANAGE_DOCUMENTS" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
Ich versuche, das hochgeladene Bild als Hintergrund zu setzen, weißt du wie? – nothingness
READ_EXTERNAL_STORAGE wird nur benötigt, wenn Sie WRITE_EXTERNAL_STORAGE noch nicht haben. Sind Sie sicher, dass MANAGE_DOCUMENTS Sinn macht? https://developer.android.com/reference/android/Manifest.permission.html sagt: "Diese Berechtigung sollte nur von der Platform Document Management App angefordert werden. Diese Berechtigung kann nicht für Apps von Drittanbietern erteilt werden." –