Android:使用目标sdk 24打开图库相册
可以从sdk v24开始在Android Gallery中打开相册吗 我有一个应用程序,可以处理图像并将其保存到外部存储器中的特定唱片集名称下。我想有一个可能性,从应用程序中打开该专辑直接在安卓画廊。有可能做到这一点吗 我可以轻松打开单个文件,但不能打开整个相册: MyAndroid:使用目标sdk 24打开图库相册,android,gallery,Android,Gallery,可以从sdk v24开始在Android Gallery中打开相册吗 我有一个应用程序,可以处理图像并将其保存到外部存储器中的特定唱片集名称下。我想有一个可能性,从应用程序中打开该专辑直接在安卓画廊。有可能做到这一点吗 我可以轻松打开单个文件,但不能打开整个相册: MyAndroidManifest.xml ... <provider android:name="android.support.v4.content.FileProvider" android:authori
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>
...
<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
<external-path name="external_files" path="."/>
</paths>
我打开特定文件的操作:
打开一个特定的文件就可以了。然而,我无法打开整张专辑。这可能吗?您可以扫描相册中的图像,并在创建的活动中显示它们,而无需打开相册上的图库
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;
}
}
公共类MainActivity扩展AppCompative实现MediaScannerConnection.MediaScannerConnectionClient{
公共字符串[]所有文件;
私有字符串扫描路径;
私有静态最终字符串文件_TYPE=“image/*”;
专用MediaScannerConnectionConn;
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.content\u main);
文件夹=环境
.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES+“/YourAlbumName”);
allFiles=folder.list();
对于(int i=0;iHey,感谢您的回复。是的,这是我的解决方案,以防我无法在gallery中打开相册。但我正在寻找一个明确的答案——我可以在默认的gallery应用程序中打开相册吗。
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;
}
}