Foto machen und speichern

  • Antworten:6
Ralf Kruppa
  • Forum-Beiträge: 26

28.11.2017, 10:54:42 via Website

Hallo, ich möchte in meiner APP eine Foto machen und dieses dann in einem Verzeichnis ablegen.
Ich habe erstmal einen Button erstellt um damit dann die Standart Foto App aufzurufen.
Dabei stürzt meine APP ab. Was mache ich falsch ?

Manifest:

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.camera" android:required="true" />

Activity:

knips = (Button) findViewById(R.id.button);
    knips.setOnClickListener(new ImageView.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
            if (takePictureIntent.resolveActivity(getPackageManager()) != null) {
                startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE);
            }
        }
    });

Wer kann helfen ?
Gruß Ralf

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

28.11.2017, 10:59:14 via App

Hallo Ralf,
ich habe deinen Thread mal in den passenden Bereich verschoben.
was ist denn der Error Log. Damit ist ersichtlich warum die App abstürzt

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Ralf Kruppa
  • Forum-Beiträge: 26

28.11.2017, 12:30:08 via Website

So wie es aussieht ist es ein Berechtigungsproblem.

11-28 12:11:30.191 8831-8831/eu.selfosu.a30851kr.cookingkruppa E/AndroidRuntime: FATAL EXCEPTION: main
                                                                             Process: eu.selfosu.a30851kr.cookingkruppa, PID: 8831
                                                                             java.lang.SecurityException: Permission Denial: starting Intent { act=android.media.action.IMAGE_CAPTURE cmp=com.sec.android.app.camera/.Camera } from ProcessRecord{72d5941 8831:eu.selfosu.a30851kr.cookingkruppa/u0a279} (pid=8831, uid=10279) with revoked permission android.permission.CAMERA
                                                                                 at android.os.Parcel.readException(Parcel.java:1620)
                                                                                 at android.os.Parcel.readException(Parcel.java:1573)

Aber ich habe doch die Berechtigung für die Camera im Manifest gesetzt ?

Gruß Ralf

Antworten
Ralf Kruppa
  • Forum-Beiträge: 26

28.11.2017, 12:33:41 via Website

Habe folgendes noch mit eingebaut:

    private void checkPermission() {
    if(ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED){
        if(ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.CAMERA)){

        }else{
            ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CAMERA}, REQUEST_CODE_ASK_PERMISSION);
        }
    }       
}

Jetzt startet die Kamera und ich kann ein BIld machen ... nun muß ich es noch abspeichern.

Antworten
Ralf Kruppa
  • Forum-Beiträge: 26

28.11.2017, 12:39:27 via Website

Gibt es einen Möglichkeit den Pfad und Dateinamen als Parameter mit zu übergeben ?

Antworten
Ralf Kruppa
  • Forum-Beiträge: 26

28.11.2017, 13:12:53 via Website

Habe gefunden wie ich den Parameter übergeben kann:

imageFile = new File("pictureAPP/temp.png");
            Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
            takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(imageFile));
            if (takePictureIntent.resolveActivity(getPackageManager()) != null) {
                startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE);
            }

Aber leider finde ich dann im Pfad nicht das Bild ?

Den Request fange ich auch ab, aber muß ich da denn auch noch was machen das das Bild abgelegt wird ?

   @Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (resultCode == RESULT_OK) {
        if (requestCode == REQUEST_IMAGE_CAPTURE) {

            Toast.makeText(getBaseContext(), "Fotoausgewählt", Toast.LENGTH_SHORT).show();
        }
    }
    super.onActivityResult(requestCode, resultCode, data);
}

Antworten
Ralf Kruppa
  • Forum-Beiträge: 26

28.11.2017, 13:38:13 via Website

Wenn ich den Data anteil vom Request in einen ImageView anzeigen möchte:

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (resultCode == RESULT_OK) {
        if (requestCode == REQUEST_IMAGE_CAPTURE) {
            Bitmap thumb = (Bitmap) data.getExtras().get("data");
            ImageView bild = (ImageView) findViewById(R.id.imageView3);
            bild.setImageBitmap(thumb);

            Toast.makeText(getBaseContext(), "Fotoausgewählt", Toast.LENGTH_SHORT).show();
        }
    }
    super.onActivityResult(requestCode, resultCode, data);
}

bekomme ich folgende Fehler:

Process: eu.selfosu.a30851kr.cookingkruppa, PID: 3924
                                                                             java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=3, result=-1, data=null}

Antworten