Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Android: open gallery album using target sdk 24

Is it possible to open an album in Android Gallery starting from sdk v24?

I have an application that manipulates an image and saves it to the external storage under specific album name. I would like to have a possibility from the application to open that album directly in Android Gallery. Is it possible to achieve that?

I can easily open a single file, but not the whole album:

My AndroidManifest.xml

...
<provider
    android:name="android.support.v4.content.FileProvider"
    android:authorities="${applicationId}.provider"
    android:exported="false"
    android:grantUriPermissions="true">
    <meta-data
        android:name="android.support.FILE_PROVIDER_PATHS"
        android:resource="@xml/provider_paths"/>
</provider>
...

My provider_paths.xml

<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
    <external-path name="external_files" path="."/>
</paths>

My handling of opening a specific file:

Intent i = new Intent();
i.setAction(Intent.ACTION_VIEW);
File myFile = new File(new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), MY_ALBUM_NAME), MY_FILE_NAME);
Uri myUri = FileProvider.getUriForFile(context, context.getPackageName() + ".provider", myFile);
i.setDataAndType(myUri, "image/*");
i.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
startActivity(i);

Opening a specific file works just fine. However, I cannot make it to open the whole album. Is that possible?

like image 529
Maksim Sorokin Avatar asked Nov 08 '22 16:11

Maksim Sorokin


1 Answers

You can scan images in your album and show them in an Activity than you created instead of opening gallery on your album.

public class MainActivity extends AppCompatActivity implements MediaScannerConnection.MediaScannerConnectionClient {
public String[] allFiles;
private String SCAN_PATH ;
private static final String FILE_TYPE="image/*";

private MediaScannerConnection conn;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.content_main);

    File folder = Environment
            .getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES + "/YourAlbumName");
    allFiles = folder.list();
    for(int i=0;i<allFiles.length;i++)
    {
        Log.d("all file path"+i, allFiles[i]+allFiles.length);
    }


    SCAN_PATH=Environment.getExternalStorageDirectory().toString()+"/Photo/"+allFiles[0];
    System.out.println(" SCAN_PATH  " +SCAN_PATH);

    Log.d("SCAN PATH", "Scan Path " + SCAN_PATH);
    Button scanBtn = (Button)findViewById(R.id.button);
    scanBtn.setOnClickListener(new View.OnClickListener(){
        @Override
        public void onClick(View v) {
            startScan();
        }});
}
private void startScan()
{
    Log.d("Connected","success"+conn);
    if(conn!=null)
    {
        conn.disconnect();
    }
    conn = new MediaScannerConnection(this,this);
    conn.connect();
}
@Override
public void onMediaScannerConnected() {
    Log.d("onMediaScannerConnected","success"+conn);
    conn.scanFile(SCAN_PATH, FILE_TYPE);
}
@Override
public void onScanCompleted(String path, Uri uri) {
    try {
        Log.d("onScanCompleted",uri + "success"+conn);
        System.out.println("URI " + uri);
        if (uri != null)
        {
            Intent intent = new Intent(Intent.ACTION_VIEW);
            intent.setData(uri);
            startActivity(intent);
        }
    } finally
    {
        conn.disconnect();
        conn = null;
    }
}

}

like image 86
Marzi Heidari Avatar answered Nov 24 '22 01:11

Marzi Heidari