Android: 使用目标SDK 24 打开图库相册

5

从sdk v24开始,是否可以在Android Gallery中打开相册?

我有一个应用程序,可以操作图像并将其保存到外部存储器中的特定相册名称下。 我希望应用程序能够直接在Android Gallery中打开该相册。 是否可以实现这一点?

我可以轻松地打开单个文件,但无法打开整个相册:

我的 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>
...

我的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>

我打开一个 特定文件 的处理方式:

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);

打开特定的文件没问题。但是我无法让它打开整个相册。这可能吗?

1个回答

1
你可以扫描相册中的图片,将它们显示在你创建的活动中,而不是打开相册。
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;
    }
}

}


嘿,谢谢回复。是的,那是我的解决方案,以防我无法在画廊中打开相册。但我正在寻找一个明确的答案 - 我能在默认的画廊应用程序中打开相册吗? - Maksim Sorokin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接