ImageView Bild wird auf Tablet angezeigt, nicht auf dem Handy? Warum?

  • Antworten:11
Michael Stellmach
  • Forum-Beiträge: 6

04.04.2016, 11:26:32 via Website

Moin,
hab da ein kleines Problem! Ich habe eine App programmiert mit der ich Bilder per Kamera aufnehmen, speichern und anzeigen will. Bis auf das anzeigen funktioniert es auch wunderbar (Handy: Samsung S5, Android Version 5.0). Jetzt habe ich die App auf mein Tablet geladen (Android Version 4.2.2, Samsung SM-T110) und das Bild wird angezeigt? Kann mir jemand erklären warum das so ist?
Hier noch mein Codeauschnitt(liegt es am Code?):

public void beleg_scan_view (View view){ 
    setContentView(R.layout.beleg_scan);
    button_cam = (Button)findViewById(R.id.button10);
    eingabe = (EditText)findViewById(R.id.editText12);
    imageView = (ImageView)findViewById(R.id.image_view1);

    button_cam.setOnClickListener(new View.OnClickListener() {

    @Override
    public void onClick(View v) {
        Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        File file = getFile();
        intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(file));
        startActivityForResult(intent, cam_request);
    }
    });
}
private File getFile(){
    File folder = new File("sdcard/Belege");
    if(!folder.exists())
    {
        folder.mkdir();
    }
    File image_file = new File(folder,eingabe.getText()+".png");
    return image_file;

}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data ){
    if (requestCode == cam_request && resultCode == RESULT_OK){
    String path = "sdcard/Belege/"+eingabe.getText()+".png";
    imageView.setImageDrawable(Drawable.createFromPath(path));

                }
 super.onActivityResult(requestCode, resultCode, data);
}

Grüße
Michael

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

04.04.2016, 11:36:02 via App

Ich glaube es liegt an den Permissions.
Hast du alle richtig gesetzt?

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

Michael Stellmach

Antworten
Michael Stellmach
  • Forum-Beiträge: 6

04.04.2016, 11:39:47 via Website

Ich habe die Write und die Read Permissions gesetzt.

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

04.04.2016, 13:27:21 via App

Hmm ist der Pfad evntl. anders ider hast du im S5 die Bilder auf SD?

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

Michael Stellmach

Antworten
Michael Stellmach
  • Forum-Beiträge: 6

04.04.2016, 13:35:51 via Website

Die Bilder werden auf dem Handy gespeichert. Auf dem Tablet funktioniert es ja..... Bild aufnehmen und anzeigen.... Ist die selbe App....

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

04.04.2016, 13:42:38 via App

Ja selbe App anderes Umfeld.
Wenn die Pfade anders sind welche bei dir teils hardcoded sind dann kann das schon passieren

— geändert am 04.04.2016, 13:42:49

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

Michael Stellmach

Antworten
Michael Stellmach
  • Forum-Beiträge: 6

04.04.2016, 14:26:56 via Website

Ok, sowas ähnliches habe ich mir auch schon gedacht :-)
Ne Idee wie ich das anpassen kann? Ich habe schon den Pfad des Bildes hardcoded eingegeben.... nichts....

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

04.04.2016, 14:40:38 via App

Du musst die Pfade dynamisch holen Über Envrirronment getExternalPath ider so

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

Michael Stellmach

Antworten
Michael Stellmach
  • Forum-Beiträge: 6

08.04.2016, 11:10:08 via Website

Moin, das habe ich jetzt bis zum erbrechen versucht.... Keine Chance.... Kann mir keiner helfen? Liegt es daran, dass ich dem Bild einen Namen mitgebe, der nicht übergeben wird? Bin verzweifelt!!!!

Please help!!!!

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

08.04.2016, 15:03:07 via App

Ich werde es bei gelegenheit mal testen.
Aber kann dir keine Feste Zeit sagen

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

Michael Stellmach

Antworten
Michael Stellmach
  • Forum-Beiträge: 6

08.04.2016, 15:28:31 via Website

Das wäre ja super! Danke Dir!!!

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

09.04.2016, 10:52:02 via Website

Ich hab das so gemaht, so geht es bei mir.
Evntl musst du noch den Pfad anpassen, sollte aber eigentlich nicht Notwendig sein:

 @Override
protected void onActivityResult(int requestCode, int resultCode, Intent data ){
    if (requestCode == cam_request && resultCode == RESULT_OK){
        ImageView imageView = (ImageView)findViewById(R.id.imageView);

        Uri selectedImage = data.getData();
        String s = getPath(selectedImage); // get Path from uri

        try
        {
            Bitmap myBitmap = BitmapFactory.decodeFile(s);

            imageView.setImageBitmap(myBitmap);
        }
        catch (Exception e)
        {
            Toast.makeText(this, "Failed to load", Toast.LENGTH_SHORT).show();
            Log.d("ERROR", "Failed to load", e);
        }
    }
    super.onActivityResult(requestCode, resultCode, data);
}

und hier noch getPath:

public String getPath(Uri uri) {
    String[] projection = {MediaStore.Images.Media.DATA};
    Cursor cursor = getContentResolver().query(uri, projection, null, null, null);
    if (cursor == null) return null;
    int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
    cursor.moveToFirst();
    String s = cursor.getString(column_index);
    cursor.close();
    return s;
}

Das Problem hierbei ist immer, dass der Pfad so relativ wie möglich sein muss, um auf allen geräten zu funktionieren.

PS: Dein Code jetzt hier funktioniert jetzt aber nur bis android 5.x ab Andrid 6.0 musst du die FilePermission noch per Code behandeln und den User bestätigen lassen.

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

Michael Stellmach

Antworten