Autore Topic: Salvataggio foto scattata in cartella pubblica  (Letto 873 volte)

Offline OssoMasticato

  • Nuovo arrivato
  • *
  • Post: 10
  • Respect: +2
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Note GT-N7000
  • Sistema operativo:
    Windows XP SP2/Win Vista
Salvataggio foto scattata in cartella pubblica
« il: 01 Giugno 2013, 10:40:44 CEST »
0
Salve a tutti. Sto cercando di creare una app che abbia la possibilità di scattare una foto e la renda immediatamente disponibile nella cartella in cui l'utente salva le altre foto (una cartella creata ad hoc, ma pubblica e sul dispositivo).

L'unico problema che incontro sta su MediaScannerConnection :

Codice (Java): [Seleziona]
               public void onPictureTaken(byte[] _data, Camera _camera) { //Richiamato quando sono disponibili
                                                                                           //i dati della foto appena scattata
                      // creo stringa con data e ora
                  Date today;
                  String result;
                  SimpleDateFormat formatter;
                  Locale zona=Locale.getDefault();
                  formatter = new SimpleDateFormat("d-MMM-yyyy-HH_mm_ss",zona);
                  today = new Date();
                  result = formatter.format(today);
                  System.out.println("Locale: " + zona);
                  System.out.println("Result: " + result);


                    String nameFile = result+".jpg";
                    String imgext=new String("TestPhoto");
                    File rootext=(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES));
                    File img1=new File(rootext,imgext);  
                    File img=new File(img1,nameFile);
                    Log.v(TAG, "destinazione presa:"+rootext);
                    Log.v(TAG, "destinazione :"+img);
                    try {

                    img1.mkdirs(); // creo directory per salvare il file
                           
                            Bitmap scattoPreso = BitmapFactory.decodeByteArray(_data,0,_data.length);
                           
                       
                        FileOutputStream fileOutputStream = new FileOutputStream(img);
                                                       
                        BufferedOutputStream bos = new BufferedOutputStream(fileOutputStream);

                        scattoPreso.compress(CompressFormat.JPEG, 100, bos);
                       
                        bos.flush();
                        bos.close();
                       
                        MediaScannerConnection.scanFile(this,    //  il problema si trova qui su .scanFile!  //
                                new String[] { img.toString() }, null,
                                new MediaScannerConnection.OnScanCompletedListener() {
                            public void onScanCompleted(String path, Uri uri) {
                                Log.i("ExternalStorage", "Scanned " + path + ":");
                                Log.i("ExternalStorage", "-> uri=" + uri);
                            }
                        });

                    } catch (FileNotFoundException e) {
                            Log.e("demo", e.toString());

                    } catch (IOException e) {
                        Log.v(TAG, "errore ioexception");
                                        e.printStackTrace();
                                }




La risposta di Eclipse è:

The method scanFile(Context, String[], String[], MediaScannerConnection.OnScanCompletedListener) in the type MediaScannerConnection is not applicable for the arguments (new Camera.PictureCallback(){}, String[], null, new  MediaScannerConnection.OnScanCompletedListener(){})


Non riesco ad individuare soluzioni. Ho provato a sistemare il codice in altre posizioni ma generando altri errori. Avete qualche idea? 


Grazie!

Offline NanoAndroide

  • Utente junior
  • **
  • Post: 63
  • Respect: +3
    • Google+
    • Mostra profilo
    • MeToo
  • Dispositivo Android:
    GT-S5570
  • Play Store ID:
    MeToo
  • Sistema operativo:
    Windows 7
Re:Salvataggio foto scattata in cartella pubblica
« Risposta #1 il: 02 Giugno 2013, 21:40:25 CEST »
0

La risposta di Eclipse è:

The method scanFile(Context, String[], String[], MediaScannerConnection.OnScanCompletedListener) in the type MediaScannerConnection is not applicable for the arguments (new Camera.PictureCallback(){}, String[], null, new  MediaScannerConnection.OnScanCompletedListener(){})


Ti sta dicendo che gli argomenti che gli passi non sono quelli attesi. Il primo è il Context, che gli passi con 'this'. Prova a recuperare il context diversamente.

Offline OssoMasticato

  • Nuovo arrivato
  • *
  • Post: 10
  • Respect: +2
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Note GT-N7000
  • Sistema operativo:
    Windows XP SP2/Win Vista
Re:Salvataggio foto scattata in cartella pubblica
« Risposta #2 il: 03 Giugno 2013, 09:20:29 CEST »
0
Ti sta dicendo che gli argomenti che gli passi non sono quelli attesi. Il primo è il Context, che gli passi con 'this'. Prova a recuperare il context diversamente.


Hai perfettamente ragione. E' bastato modificare il contesto (impostandolo col nome della Activity) per farlo funzionare!

Offline NanoAndroide

  • Utente junior
  • **
  • Post: 63
  • Respect: +3
    • Google+
    • Mostra profilo
    • MeToo
  • Dispositivo Android:
    GT-S5570
  • Play Store ID:
    MeToo
  • Sistema operativo:
    Windows 7
Re:Salvataggio foto scattata in cartella pubblica
« Risposta #3 il: 03 Giugno 2013, 15:51:52 CEST »
0

Hai perfettamente ragione. E' bastato modificare il contesto (impostandolo col nome della Activity) per farlo funzionare!

Bene!  :D
Il più delle volte basta leggere con attenzione l'errore per avere la soluzione al problema a portata di mano!  ;-)

Offline OssoMasticato

  • Nuovo arrivato
  • *
  • Post: 10
  • Respect: +2
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Note GT-N7000
  • Sistema operativo:
    Windows XP SP2/Win Vista
Re:Salvataggio foto scattata in cartella pubblica
« Risposta #4 il: 10 Giugno 2013, 15:26:34 CEST »
0
Sarebbe possibile usare startActivityForResult(Intent, int) dopo

Codice (Java): [Seleziona]
        PictureCallback jpegCallback = new PictureCallback(){
come nel tutorial in

Off-Topic:

per far apparire la foto appena scattata e decidere se eliminarla oppure salvarla?