Cloud-Lösungen der Zukunft - Testen!
Revolutionäre Cloud-Technologie, ganz ohne versteckte Kosten. Profitieren Sie von unserer Testphase und entdecken Sie umfassende Funktionen. Der Anmeldeprozess ist transparent und unkompliziert. Starten Sie jetzt Ihre Reise in die Cloud - Kostenfrei!
Android-Entwicklung: Bildaufnahme leicht gemacht
Tauchen Sie ein in die Welt der Android-Entwicklung mit unserem neuesten Blog-Beitrag! Lernen Sie, wie Sie mühelos Bilder sowohl von der Kamera als auch aus der Galerie in Ihre App integrieren und anzeigen. Von der Berechtigungsverwaltung bis hin zur Anzeige von Bildern in verschiedenen Ansichten führt Sie unser Leitfaden Schritt für Schritt durch den Prozess. Tauchen Sie ein und entdecken Sie die Möglichkeiten der Bildaufnahme in Android!
Einführung
In diesem Tutorial entwickeln wir eine Anwendung, die ein Bild entweder von der Kamera oder aus der Galerie auswählt und es in einem ImageView anzeigt. Hinweis: Der folgende Code funktioniert einwandfrei für Versionen vor Android Nougat.
Berechtigungen
Mit dem Aufkommen von Android Marshmallow müssen Berechtigungen zur Laufzeit implementiert werden. Fügen Sie die folgenden Berechtigungen in die Datei AndroidManifest.xml oberhalb des Anwendungstags ein.
<uses-feature android:name="android.hardware.camera" android:required="false" />
<uses-feature android:name="android.hardware.camera.autofocus" android:required="false" />
<uses-feature android:name="android.hardware.camera.flash" android:required="false" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
Durch das Hinzufügen von android.hardware.camera erkennt der Play Store die Anwendung und verhindert die Installation auf Geräten ohne Kamera. Intent ist die Standardmethode, um Aktionen an eine andere Anwendung zu delegieren. Um die native Kamera zu starten, benötigt der Intent android.provider.MediaStore.ACTION_IMAGE_CAPTURE
. Um ein Bild aus der Galerie auszuwählen, benötigt der Intent das folgende Argument: Intent.ACTION_GET_CONTENT
. In diesem Tutorial rufen wir einen Bildauswahldialog auf, der es uns ermöglicht, ein Bild von der Kamera oder Galerie auszuwählen und es in einem runden ImageView und einem normalen ImageView anzuzeigen. Fügen Sie die folgende Abhängigkeit in die build.gradle-Datei ein:
compile 'de.hdodenhof:circleimageview:2.1.0'
Projektstruktur für die Android-Bildaufnahme
Das Layout für activity_main.xml
bleibt gleich, mit Ausnahme der Änderung des Symbols für die FAB-Schaltfläche auf @android:drawable/ic_menu_camera
. Der Inhalt der content_main.xml lautet wie folgt:
<RelativeLayout xmlns:android="https://schemas.android.com/apk/res/android"
xmlns:app="https://schemas.android.com/apk/res-auto"
xmlns:tools="https://schemas.android.com/tools"
android:id="@+id/content_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#000000"
android:padding="@dimen/activity_vertical_margin"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:context=".MainActivity"
tools:showIn="@layout/activity_main">
<RelativeLayout
android:layout_width="250dp"
android:layout_height="250dp"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:background="@drawable/image_border">
<ImageView
android:id="@+id/imageView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:adjustViewBounds="true"
android:scaleType="centerCrop" />
</RelativeLayout>
<de.hdodenhof.circleimageview.CircleImageView
android:id="@+id/img_profile"
android:layout_width="100dp"
android:layout_height="100dp"
android:layout_gravity="center_horizontal"
android:src="@drawable/profile"
app:civ_border_width="5dp"
app:civ_border_color="#FFFFFF"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true" />
</RelativeLayout>
MainActivity.java
Der Code für MainActivity.java
lautet wie folgt:
public class MainActivity extends AppCompatActivity {
Bitmap myBitmap;
Uri picUri;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
FloatingActionButton fab = findViewById(R.id.fab);
fab.setOnClickListener(view -> startActivityForResult(getPickImageChooserIntent(), 200));
}
private Intent getPickImageChooserIntent() {
Uri outputFileUri = getCaptureImageOutputUri();
List<Intent> allIntents = new ArrayList<>();
PackageManager packageManager = getPackageManager();
Intent captureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
List<ResolveInfo> listCam = packageManager.queryIntentActivities(captureIntent, 0);
for (ResolveInfo res : listCam) {
Intent intent = new Intent(captureIntent);
intent.setComponent(new ComponentName(res.activityInfo.packageName, res.activityInfo.name));
if (outputFileUri != null) {
intent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri);
}
allIntents.add(intent);
}
Intent galleryIntent = new Intent(Intent.ACTION_GET_CONTENT);
galleryIntent.setType("image/*");
List<ResolveInfo> listGallery = packageManager.queryIntentActivities(galleryIntent, 0);
for (ResolveInfo res : listGallery) {
Intent intent = new Intent(galleryIntent);
intent.setComponent(new ComponentName(res.activityInfo.packageName, res.activityInfo.name));
allIntents.add(intent);
}
Intent mainIntent = allIntents.get(allIntents.size() - 1);
for (Intent intent : allIntents) {
if (intent.getComponent().getClassName().equals("com.android.documentsui.DocumentsActivity")) {
mainIntent = intent;
break;
}
}
allIntents.remove(mainIntent);
Intent chooserIntent = Intent.createChooser(mainIntent, "Quelle auswählen");
chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, allIntents.toArray(new Parcelable[0]));
return chooserIntent;
}
private Uri getCaptureImageOutputUri() {
File getImage = getExternalCacheDir();
return getImage != null ? Uri.fromFile(new File(getImage.getPath(), "profile.png")) : null;
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode == Activity.RESULT_OK) {
ImageView imageView = findViewById(R.id.imageView);
CircleImageView croppedImageView = findViewById(R.id.img_profile);
if (getPickImageResultUri(data) != null) {
picUri = getPickImageResultUri(data);
try {
myBitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(), picUri);
croppedImageView.setImageBitmap(myBitmap);
imageView.setImageBitmap(myBitmap);
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
private Uri getPickImageResultUri(Intent data) {
return data != null && data.getAction() != null && data.getAction().equals(MediaStore.ACTION_IMAGE_CAPTURE)
? getCaptureImageOutputUri() : data.getData();
}
}
Kostenlosen Account erstellen
Registrieren Sie sich jetzt und erhalten Sie exklusiven Zugang zu weiterführenden Ressourcen, individuellem Support und einer Community von Experten.
Aktuelle Beiträge
activity_main.xmlAndroidAndroid EntwicklungAndroid Manifest.xmlAndroid MarshmallowAndroid NougatAndroid-Bildaufnahme-Codeandroid.hardware.cameraAppBerechtigungen zur LaufzeitBerechtigungsverwaltungBildanzeigeBildaufnahmeBildauswählerbuild.gradlecontent_main.xmldata.getExtras().get("data")ExifInterfaceGaleriegetCaptureImageOutputUri()getPickImageChooserIntent()getResizedBitmap()ImageViewIntentIntent.ACTION_GET_CONTENTIntent.EXTRA_INITIAL_INTENTSKamerakreisförmiges ImageViewMainActivity.javaMediaStore.ACTION_IMAGE_CAPTUREMediaStore.EXTRA_OUTPUTMediaStore.Images.Media.getBitmaponActivityResultonRestoreInstanceState()onSaveInstanceState()rotateImageIfRequiredsetImageBitmapstartActivityForResult
Testen Sie unsere Cloud-Lösungen für Android-Entwicklung
Entdecken Sie die Möglichkeiten der Android-Entwicklung mit unserer leistungsstarken Cloud-Infrastruktur. Integrieren Sie mühelos Kamera- und Galerie-Funktionen in Ihre App und profitieren Sie von unserer sicheren und zuverlässigen Cloud-Umgebung. Starten Sie jetzt Ihre kostenlose Testphase und erleben Sie die Vorteile unserer Cloud-Dienste für Entwickler.