2017-09-22 3 views
5

sdk v24부터 Android 갤러리에서 앨범을 열 수 있습니까?Android : 대상 SDK를 사용하는 공개 갤러리 앨범 24

이미지를 조작하고 특정 앨범 이름으로 외부 저장 장치에 저장하는 응용 프로그램이 있습니다. 응용 프로그램에서 해당 앨범을 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

앨범의 이미지를 스캔하여 앨범에서 갤러리를 여는 대신 작성한 것보다 활동에 표시 할 수 있습니다.

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

}

+0

이봐, 응답에 대한 감사합니다. 예. 갤러리에서 앨범을 열 수없는 경우를 대비 한 해결책이었습니다. 하지만 명확한 답변을 찾고 있는데 - 기본 갤러리 응용 프로그램에서 앨범을 열 수 있습니까? –