Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    [Android] Problema nell'integrare la fotocamera

    Salve, mi stavo cimentando nella creazione di una semplice app dotata di un Button e di una ImageView: il button avvia la fotocamera del device, e l'immagine scattata compare nell'ImageView. Questo almeno quanto dovrebbe accadere, ma c'è qualcosa che non quadra...
    Questo è il codice:
    codice:
    import android.app.Activity;import android.content.Intent;
    import android.graphics.Bitmap;
    import android.os.Bundle;
    import android.provider.MediaStore;
    import android.view.View;
    import android.widget.Button;
    import android.widget.ImageView;
    
    
    public class MainActivity extends Activity {
        Button btn;
        private static final int CAMERA_REQUEST = 123;
        ImageView imageView;
    
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            btn = (Button) findViewById(R.id.click);
            imageView = (ImageView) imageView.findViewById(R.id.fotografia);
        }
    
    
        public void btnClick(View v) {
            Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
            startActivityForResult(intent, CAMERA_REQUEST);
        }
    
    
        public void onActivityResult(int requestCode, int resultCode, Intent data) {
            if (requestCode == CAMERA_REQUEST && resultCode == Activity.RESULT_OK) {
                Bitmap photo = (Bitmap) data.getExtras().get("data");
                imageView.setImageBitmap(photo);
            }
        }
    
    }

    btnClick() è definito come valore di un onClick nell'XML che realizza il Button.
    Android Studio non segnala errori, ma in emulazione l'applicazione viene terminata.
    Non mi quadra molto quel get("data") ma se non metto le virgolette mi dice che un Intent non è una String!

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    Sei sicuro di poter usare la fotocamera all'interno di un emulatore? Che dovrebbe vedersi? (ammetto di non aver mai provato una cosa del genere!)

    Ad ogni modo, prima di avviare la fotocamera devi accertarti che il dispositivo abbia una App in grado di gestirne l'Intent:

    codice:
    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    if (intent.resolveActivity(getPackageManager()) != null) {
       startActivityForResult(intent, CAMERA_REQUEST);
    }

    Se non esiste una App in grado di gestire l'intent, la tua all crasha.

    La parte relativa al data è corretta: data è un oggetto Intent, da cui ottiene il Bundle ( getExtra() ) e su quest'ultimo oggetto invochi il get() per ottenere la proprietà che si chiama "data". N.B.: il nome del parametro lo puoi chiamare come vuoi... il fatto che in giro si trovi molto spesso come "data" è un caso, forse fuorviante.


    Ciao.
    Ultima modifica di LeleFT; 30-03-2018 a 12:32
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    Grazie innanzitutto per avermi spiegato l'omonimia sul parametro "data" che non è nemmeno l'unica in circolazione: basti pensare a istanze di Button forzatamente omonime dell'id del Button dichiarato nell'XML...

    Ho comunque trovato l'errore: l'istanza di ImageView andava inizializzata così:
    codice:
    imageView = (ImageView) findViewById(R.id.fotografia);
    Per quanto riguarda il tuo dubbio sulla fotocamera dell'emulatore... Uso Genymotion (anche se non riesco ad avviare parecchi device e non vengo a capo della causa...) che mi sfrutta la webcam del portatile su cui è installato l'emulatore: siccome il device emulato ha due fotocamere, una posso associarla alla webcam, nell'altra vedo una sorta di screensaver con bolle di sapone in grafica "console". In ogni caso, non funziona la cattura di una immagine tramite l'app, tuttavia usando l'app Fotocamera del device emulato scatta correttamente le foto tramite webcam, credo quindi c'entri in qualche modo il tuo discorso...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.