2017-09-10 2 views
0

Ich verweise diese link zum Anzeigen von Bildern aus einem bestimmten Pfad im internen Speicher. Aber es funktioniert nur mit ACTION_VIEW, aber wenn ich ACTION_PICK verwenden zeigt es nicht den gleichen Pfad stattdessen seine einfach zu öffnen Galerie. Gibt es eine Möglichkeit, ein einzelnes Bild aus diesem bestimmten Pfad nach dem Anzeigen auszuwählen?Wählen Sie Bilder aus bestimmten Ordner

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

Antwort

0

Wenn Sie eine ACTION_PICK Absicht machen, werden Sie eine andere Anwendung zu fragen, eine Aktion auszuführen (lassen Sie sie eine Datei auswählen). Es gibt keine Möglichkeit, sicherzustellen, dass es auf eine bestimmte Weise funktioniert - der Benutzer hätte genauso gut eine andere App hinzufügen können, die ACTION_PICK implementiert und etwas anderes tut. Also nein, es gibt keine Möglichkeit sicherzustellen, dass es sich von diesem Pfad abwendet. Wenn Sie das unbedingt benötigen, müssen Sie anstelle von ACTION_PICK einen eigenen Picker implementieren.

+0

Was meinen Sie mit "implementieren Sie Ihre eigenen Picker"? Wie geht das? – Sammy

+1

Sie schreiben eine Aktivität, die alle Dateien in der Aktivität in einer Listen- oder Rasteransicht anzeigt, und Sie können eine auswählen. Eine grundlegende könnte in einer Stunde oder zwei getan werden. Ein gutaussehender Mann wird natürlich länger brauchen. –

+0

Verstanden. Lass mich das versuchen. – Sammy

Verwandte Themen