Android: open gallery album using target sdk 24

Can I open an album in Android Gallery starting with sdk v24?

I have an application that manages an image and saves it to external storage under the specific album name. I would like to be able to open this album directly from the Android Gallery from the application. Can this be achieved?

I can easily open one file, but not the entire 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 fine. However, I cannot open the whole album. Is it possible?

+5
source share
1 answer

You can scan the images in your album and show them in action than you created, and not open the 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; } } 

}

+1
source

Source: https://habr.com/ru/post/1272048/


All Articles