2017-09-10 44 views
0

我參考此link以顯示來自內部存儲器中特定路徑的圖像。但它只與ACTION_VIEW工作,但是當我使用ACTION_PICK它沒有顯示相同的路徑,而是它的簡單的開放畫廊。顯示後有沒有任何方法可以從特定路徑中選擇單個圖像?從特定文件夾中選取圖像

public class NewActivity extends AppCompatActivity{ 
 

 
    private static final String file_path = Environment.getExternalStorageDirectory().getAbsolutePath()+"/fun"; 
 
    private File[] allFiles ; 
 
    private String imagepath ; 
 

 
    @Override 
 
    protected void onCreate(@Nullable Bundle savedInstanceState) { 
 
     super.onCreate(savedInstanceState); 
 
     setContentView(R.layout.activity_main); 
 

 
     File folder = new File(file_path); 
 
     allFiles = folder.listFiles(); 
 

 
     findViewById(R.id.start).setOnClickListener(new View.OnClickListener() { 
 
      @Override 
 
      public void onClick(View v) { 
 

 
       new SingleMediaScanner(NewActivity.this, allFiles[0]); 
 

 
      } 
 
     }); 
 
    } 
 

 
    public class SingleMediaScanner implements MediaScannerConnection.MediaScannerConnectionClient { 
 

 
     private MediaScannerConnection mMs; 
 
     private File mFile; 
 

 
     public SingleMediaScanner(Context context, File f) { 
 
      mFile = f; 
 
      mMs = new MediaScannerConnection(context, this); 
 
      mMs.connect(); 
 
     } 
 

 
     public void onMediaScannerConnected() { 
 
      mMs.scanFile(mFile.getAbsolutePath(), null); 
 
     } 
 

 
     public void onScanCompleted(String path, Uri uri) { 
 
      Intent intent = new Intent(Intent.ACTION_PICK); 
 
      intent.setData(uri); 
 
      startActivityForResult(intent, 100); 
 
      mMs.disconnect(); 
 
     } 
 

 
    } 
 

 
    @Override 
 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
 
     super.onActivityResult(requestCode, resultCode, data); 
 

 
     if(requestCode==100 && resultCode==RESULT_OK){ 
 
      try{ 
 
       Uri selectedImageUri = data.getData(); 
 
       String[] projection = {MediaStore.Images.Media.DATA}; 
 
       //Cursor cursor_gallery = activity.managedQuery(selectedImageUri, projection, null, null, null); 
 
       Cursor cursor_gallery = getContentResolver().query(selectedImageUri, projection, null, null, null); 
 
       int column_index = 0; 
 
       if (cursor_gallery != null) { 
 
        column_index = cursor_gallery.getColumnIndexOrThrow(MediaStore.Images.Media.DATA); 
 
        cursor_gallery.moveToFirst(); 
 
        imagepath = cursor_gallery.getString(column_index); 
 
        cursor_gallery.close(); 
 
       } 
 
       System.out.println("sammy_imagepath "+imagepath); 
 

 
      }catch(Exception e){ 
 
       e.printStackTrace(); 
 
      } 
 
     } 
 
    } 
 
}

回答

0

當你做一個ACTION_PICK意圖,你問其他應用程序來執行操作(讓他們選擇一個文件)。沒有辦法確保它以某種方式工作 - 用戶可以輕鬆添加另一個實現ACTION_PICK的應用程序並執行其他操作。所以不,沒有辦法確保它會從這條路上選擇。如果你確實需要這個,你需要實現你自己的選擇器,而不是使用ACTION_PICK。

+0

你是什麼意思「實現你自己的選擇器」?怎麼做? – Sammy

+1

您可以編寫一個活動,以列表或網格視圖顯示活動中的所有文件,並讓您選擇一個。基本的一個可以在一兩個小時內完成。當然,一個好看的人會花更長的時間。 –

+0

明白了。讓我試試這個。 – Sammy

相關問題