2014-10-20 168 views
0

我創建了一個活動,點擊按鈕後,用戶可以從設備庫中上傳圖片,該圖片將轉化爲圖像視圖。問題是它只能從設備庫中檢索圖像,而不是從手機相機庫或手機谷歌驅動器文件夾中檢索圖像。我希望它能夠從手機上傳任何圖片,而不管其來源。從整個手機上傳圖像

下面是代碼:

Button buttonLoadImage = (Button) findViewById(R.id.btnPictureSelect); 
    buttonLoadImage.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View arg0) { 
      Intent i = new Intent(
        Intent.ACTION_PICK, 
        android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); 
      startActivityForResult(i, RESULT_LOAD_IMAGE); 
     } 
    }); 

} 

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

     if (requestCode == RESULT_LOAD_IMAGE && resultCode == RESULT_OK 
       && null != data) { 
      Uri selectedImage = data.getData(); 
      String[] filePathColumn = { MediaStore.Images.Media.DATA }; 

      Cursor cursor = getContentResolver().query(selectedImage, 
        filePathColumn, null, null, null); 
      cursor.moveToFirst(); 

      int columnIndex = cursor.getColumnIndex(filePathColumn[0]); 
      String picturePath = cursor.getString(columnIndex); 
      cursor.close(); 

      ImageView imageView = (ImageView) findViewById(R.id.profilePicturePreview); 
      imageView.setImageBitmap(BitmapFactory.decodeFile(picturePath)); 

     } 

    } 

    private byte[] readInFile(String path) throws IOException { 
     // TODO Auto-generated method stub 
     byte[] data = null; 
     File file = new File(path); 
     InputStream input_stream = new BufferedInputStream(new FileInputStream(
       file)); 
     ByteArrayOutputStream buffer = new ByteArrayOutputStream(); 
     data = new byte[16384]; // 16K 
     int bytes_read; 
     while ((bytes_read = input_stream.read(data, 0, data.length)) != -1) { 
      buffer.write(data, 0, bytes_read); 
     } 
     input_stream.close(); 
     return buffer.toByteArray(); 

    } 

任何幫助將不勝感激。

更新:

private static final int READ_REQUEST_CODE = 42; 

在代碼

Button buttonLoadImage = (Button) findViewById(R.id.btnPictureSelect); 
    buttonLoadImage.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View arg0) { 
      Intent imageIntent = new Intent(Intent.ACTION_OPEN_DOCUMENT); 
      imageIntent.addCategory(Intent.CATEGORY_OPENABLE); 
      imageIntent.setType("image/*"); 
      imageIntent.setAction(Intent.ACTION_GET_CONTENT); 
      startActivityForResult(imageIntent , READ_REQUEST_CODE); 
     } 
    }); 

} 

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

     if (requestCode == READ_REQUEST_CODE && resultCode == Activity.RESULT_OK) { 

      Uri uri = null; 
      if (data != null) { 
       uri = data.getData(); 
       Log.i(TAG, "Uri: " + uri.toString()); 
       showImage(uri); 
      } 
     } 
    } 

    private void showImage(Uri uri) { 
     // TODO Auto-generated method stub 
      ImageView imageView = (ImageView) findViewById(R.id.profilePicturePreview); 
     imageView.setImageUri(Uri.parse(new File("path_to_your_image".toString())); 
    } 

錯誤:

The method parse(String) in the type Uri is not applicable for the arguments (File) 
管線

imageView.setI mageUri(Uri.parse(new File(「path_to_your_image」.toString()));

更新2:

private void showImage(Uri uri) { 
    // TODO Auto-generated method stub 
     ImageView imageView = (ImageView) findViewById(R.id.profilePicturePreview); 
     imageView.setImageUri(Uri.fromFile(new File("/sdcard/myimage.jpg"))); 

錯誤:

The method setImageUri(Uri) is undefined for the type ImageView 

回答

1

這將是更好地使用意向來搜索您的設備提供的圖像類型的文件。

Intent imageIntent = new Intent(Intent.ACTION_OPEN_DOCUMENT); 
imageIntent.addCategory(Intent.CATEGORY_OPENABLE); 
imageIntent.setType("image/*"); 
imageIntent.setAction(Intent.ACTION_GET_CONTENT); 
startActivityForResult(imageIntent , READ_REQUEST_CODE); // set READ_REQUEST_CODE to 42 in your class 

現在,處理您導致onActivityResult()方法。

protected void onActivityResult(int requestCode, int resultCode, Intent data) { 

if (requestCode == READ_REQUEST_CODE && resultCode == Activity.RESULT_OK) { 

     Uri uri = null; 
     if (data != null) { 
      uri = data.getData(); 
      Log.i(TAG, "Uri: " + uri.toString()); 
      showImage(uri); 
     } 
} 
+0

非常感謝。出於好奇,我會在哪裏引用ImageView中的imageview imageView =(ImageView)findViewById(R.id.profilePicturePreview); imageView.setImageBitmap(BitmapFactory.decodeFile(picturePath));/A – John 2014-10-20 17:38:53

+1

您可以使用setImage(uri)方法在ImageView中顯示圖像。 – vembutech 2014-10-20 17:50:55

+1

ImageView.setImageUri(Uri.parse(new File(「path_to_your_image」.toString())); – vembutech 2014-10-20 17:57:41