Autore Topic: problema: richiamare gallery con intent e path  (Letto 1268 volte)

Offline aw4y

  • Utente junior
  • **
  • Post: 59
  • Respect: +6
    • Mostra profilo
  • Dispositivo Android:
    samsung i5500
  • Sistema operativo:
    osx/linux
problema: richiamare gallery con intent e path
« il: 05 Gennaio 2011, 15:04:44 CET »
0
Sto provando dalla mia applicazione ad avviare direttamente la gallery sulla dir che contiene le foto prodotte dall'app.
Usando questo:

Intent i = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.INTERNAL_CONTENT_URI);
startActivity(i);

riesco solo ad avviarla, ma sulla directory generale delle foto, io vorrei che la gallery si aprisse su una path specifica.
qualcuno sa aiutarmi?

grazie in anticipo
aw4y

ps: ho provato anche in altri modi, senza ottenere quello che volevo. ad esempio:

Codice (Java): [Seleziona]
        Intent intent = new Intent(Intent.ACTION_GET_CONTENT, Uri.fromFile(new File(path)));  
        startActivityForResult(intent,1);

oppure:

Codice (Java): [Seleziona]
        Intent intentBrowseFiles = new Intent(Intent.ACTION_GET_CONTENT);
        intentBrowseFiles.setData(Uri.fromFile(new File(path)));
        intentBrowseFiles.setType("image/*");
        startActivity(intentBrowseFiles);
« Ultima modifica: 11 Febbraio 2011, 15:22:22 CET da Ricky`, Reason: esiste il tag "code" »

Offline softmystery

  • Utente junior
  • **
  • Post: 105
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    lg optimus one
  • Sistema operativo:
    2.2
Re:problema: richiamare gallery con intent e path
« Risposta #1 il: 11 Febbraio 2011, 14:59:54 CET »
0
interessante... interesserebbe anche a me! ma forse questo andrebbe bene come snippet....
poi? cosa è successo? hai rispolto?
« Ultima modifica: 25 Febbraio 2011, 22:07:05 CET da softmystery »

Offline NXS

  • Nuovo arrivato
  • *
  • Post: 7
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Google Nexus S
  • Sistema operativo:
    Windows 7
Re:problema: richiamare gallery con intent e path
« Risposta #2 il: 15 Marzo 2012, 19:33:47 CET »
0
Riesumo questo topic per aggiungere la mia soluzione al problema posto e per chiedere aiuto su una ulteriore precisazione che vorrei fare. Il codice qui sotto (API 8+) è perfetto per fare uno scan di una cartella a nostra scelta contenente già immagini. Tuttavia se la cartella è vuota una volta richiamata la galleria di sistema l'applicazione va in crash. Secondo voi come potrei fare per inserire un "if" o qualcosa del genere per visualizzare semplicemente la galleria vuota o eventualmente per mandare un messaggio a schermo comunicando all'utente che non ci sono file nella cartella interessata?

Codice (Java): [Seleziona]
import java.io.File;

import android.app.Activity;
import android.content.Intent;
import android.media.MediaScannerConnection;
import android.media.MediaScannerConnection.MediaScannerConnectionClient;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;


public class MyActivity extends Activity implements MediaScannerConnectionClient {
    public String[] allFiles;
private String SCAN_PATH ;
private static final String FILE_TYPE = "images/*";

private MediaScannerConnection conn;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
   

    File folder = new File("/sdcard/YOURFOLDERNAME"); //insert complete folder path
    allFiles = folder.list();
 //   uriAllFiles= new Uri[allFiles.length];
    for(int i=0;i<allFiles.length;i++)
    {
        Log.d("all file path"+i, allFiles[i]+allFiles.length);
    }
  //  Uri uri= Uri.fromFile(new File(Environment.getExternalStorageDirectory().toString()+"/yourfoldername/"+allFiles[0]));
    SCAN_PATH=Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES).toString()+"/YOURFOLDERNAME/"+allFiles[0]; //insert your name folder
    Log.d("SCAN PATH", "Scan Path " + SCAN_PATH);
    startScan();
    }
    private void startScan()
    {
    Log.d("Connected","success"+conn);
    if(conn!=null)
    {
    conn.disconnect();
    }
    conn = new MediaScannerConnection(this,this);
    conn.connect();
    }
public void onMediaScannerConnected() {
    Log.d("onMediaScannerConnected","success"+conn);
    conn.scanFile(SCAN_PATH, FILE_TYPE);    
}
public void onScanCompleted(String path, Uri uri) {
    try {
        Log.d("onScanCompleted",uri + "success"+conn);
        if (uri != null)
        {
        Intent intent = new Intent(Intent.ACTION_VIEW);
        intent.setData(uri);
        startActivity(intent);
        }
        } finally
        {
        conn.disconnect();
        conn = null;    
        }
    finish();
       }
}
« Ultima modifica: 15 Marzo 2012, 19:37:03 CET da NXS »

Offline NXS

  • Nuovo arrivato
  • *
  • Post: 7
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Google Nexus S
  • Sistema operativo:
    Windows 7
Re:problema: richiamare gallery con intent e path
« Risposta #3 il: 16 Marzo 2012, 16:27:34 CET »
0
Anche stavolta mi rispondo da solo.... :-X

Ecco il codice funzionante. Per risolvere il problema ci voleva un if su SCAN_PATH..ho aggiunto anche un toast per comunicare che la cartella è vuota in caso non siano ancora state effettuate delle foto.

Codice (Java): [Seleziona]
import java.io.File;

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.media.MediaScannerConnection;
import android.media.MediaScannerConnection.MediaScannerConnectionClient;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;
import android.widget.Toast;


public class GalleryViewActivity extends Activity implements MediaScannerConnectionClient {
    public String[] allFiles;
private String SCAN_PATH ;
private static final String FILE_TYPE = "images/*";

private MediaScannerConnection conn;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
   

    File folder = new File("/sdcard/YOURFOLDERNAME");
   
    allFiles = folder.list();
   
 //   uriAllFiles= new Uri[allFiles.length];
    for(int i=0;i<allFiles.length;i++)
    {
        Log.d("all file path"+i, allFiles[i]+allFiles.length);
    }
   
    if(folder.isDirectory()){
         
                if(folder.list().length>0){
 
                        //folder not empty
                //  Uri uri= Uri.fromFile(new File(Environment.getExternalStorageDirectory().toString()+"/yourfoldername/"+allFiles[0]));
                        SCAN_PATH=Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES).toString()+"/YOURFOLDERNAME/"+allFiles[0]; //API 8+  
                    Log.d("SCAN PATH", "Scan Path " + SCAN_PATH);
                    startScan();
 
                }else{
                        //folder empty
                        Context context = getApplicationContext();
                        CharSequence text = "It seems you don't have took any pictures yet. Take a picture and try again!";
                        int duration = Toast.LENGTH_SHORT;

                        Toast toast = Toast.makeText(context, text, duration);
                        toast.show();
                        finish();
                       
 
                }
 
        }
   
 
   
    }
    private void startScan()
    {
    Log.d("Connected","success"+conn);
    if(conn!=null)
    {
    conn.disconnect();
    }
    conn = new MediaScannerConnection(this,this);
    conn.connect();
    }
public void onMediaScannerConnected() {
    Log.d("onMediaScannerConnected","success"+conn);
    conn.scanFile(SCAN_PATH, FILE_TYPE);    
}
public void onScanCompleted(String path, Uri uri) {
    try {
        Log.d("onScanCompleted",uri + "success"+conn);
        if (uri != null)
        {
        Intent intent = new Intent(Intent.ACTION_VIEW);
        intent.setData(uri);
        startActivity(intent);
       
       
        }
       
        } finally
        {
        conn.disconnect();
        conn = null;
       
       
        }
    finish();  
       }
}


magari a qualcuno sarà utile!!  8-)