2016-03-04 87 views
0

我在Android定制的摄像头应用程序工作时,我点击图片库中看到它显示的是移动默认画廊和展示的照片,我点击,但我想,当我在画廊单击,然后单击图像展现在我的自定义查看我怎么能实现如何显示在图像视图图像

public void clickedGallery(View view) { 
    if (MyDebug.LOG) 
     Log.d(TAG, "clickedGallery"); 
    //Intent intent = new Intent(Intent.ACTION_VIEW, MediaStore.Images.Media.EXTERNAL_CONTENT_URI); 
    Uri uri = null; 
    Media media = getLatestMedia(); 
    if (media != null) { 
     uri = media.uri; 
    } 

    if (uri != null) { 
     // check uri exists 
     if (MyDebug.LOG) 
      Log.d(TAG, "found most recent uri: " + uri); 
     try { 
      ContentResolver cr = getContentResolver(); 
      ParcelFileDescriptor pfd = cr.openFileDescriptor(uri, "r"); 
      if (pfd == null) { 
       if (MyDebug.LOG) 
        Log.d(TAG, "uri no longer exists (1): " + uri); 
       uri = null; 
      } 
      pfd.close(); 
     } catch (IOException e) { 
      if (MyDebug.LOG) 
       Log.d(TAG, "uri no longer exists (2): " + uri); 
      uri = null; 
     } 
    } 
    if (uri == null) { 
     uri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI; 
    } 
    if (!is_test) { 
     // don't do if testing, as unclear how to exit activity to finish test (for testGallery()) 
     if (MyDebug.LOG) 
      Log.d(TAG, "launch uri:" + uri); 
     final String REVIEW_ACTION = "com.android.camera.action.REVIEW"; 
     try { 
      // REVIEW_ACTION means we can view video files without autoplaying 
      Intent intent = new Intent(REVIEW_ACTION, uri); 
      this.startActivity(intent); 
     } catch (ActivityNotFoundException e) { 
      if (MyDebug.LOG) 
       Log.d(TAG, "REVIEW_ACTION intent didn't work, try ACTION_VIEW"); 
      Intent intent = new Intent(Intent.ACTION_VIEW, uri); 
      // from http://stackoverflow.com/questions/11073832/no-activity-found-to-handle-intent - needed to fix crash if no gallery app installed 
      //Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("blah")); // test 
      if (intent.resolveActivity(getPackageManager()) != null) { 
       this.startActivity(intent); 
      } else { 
       preview.showToast(null, R.string.no_gallery_app); 
      } 
     } 
    } 
} 

回答

0

下面是完整的代码,你可以修改requestCode无论你在代码中声明了什么,你都可以在下一个活动中传递Uri或文件的实际位置。

@Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     if (resultCode != RESULT_CANCELED) { 
      if (requestCode == SELECT_FILE && (data != null)) { 
       Uri selectedImageUri = data.getData(); 
       String[] projection = {MediaStore.MediaColumns.DATA}; 
       Cursor cursor = getContentResolver().query(selectedImageUri, projection, null, null, 
         null); 
       assert cursor != null; 
       int column_index = cursor.getColumnIndexOrThrow(MediaStore.MediaColumns.DATA); 
       cursor.moveToFirst(); 

       String selectedImagePath = cursor.getString(column_index); 
       if(selectedImagePath == null) { 
        selectedImagePath = getActualPathFromUri(selectedImageUri); 
       } 
       cursor.close(); 
      } else { 
       super.onActivityResult(requestCode, resultCode, data); 
      } 
     } 
    } 

    private String getActualPathFromUri(Uri selectedImageUri) { 
     Bitmap bitmap = null; 
     try { 
      bitmap = getBitmapFromUri(selectedImageUri); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
     if(bitmap == null) { 
      return null; 
     } 

     File imageFileFolder = new File(getCacheDir(),"appName"); 
     if(!imageFileFolder.exists()){ 
      imageFileFolder.mkdir(); 
     } 

     FileOutputStream out = null; 

     File imageFileName = new File(imageFileFolder, "appName-" + System.currentTimeMillis() + ".jpg"); 
     try { 
      out = new FileOutputStream(imageFileName); 
      bitmap.compress(Bitmap.CompressFormat.JPEG, 100, out); 
      out.flush(); 
      out.close(); 
     } catch (IOException e) { 
      Log.i("Exception", e.getMessage()); 
     } finally { 
      if(out != null) { 
       try { 
        out.close(); 
       } catch (IOException e) { 
        e.printStackTrace(); 
       } 
      } 
     } 
     return imageFileName.getAbsolutePath(); 
    } 

    private Bitmap getBitmapFromUri(Uri uri) throws IOException { 
     ParcelFileDescriptor parcelFileDescriptor = 
       getContentResolver().openFileDescriptor(uri, "r"); 
     assert parcelFileDescriptor != null; 
     FileDescriptor fileDescriptor = parcelFileDescriptor.getFileDescriptor(); 
     Bitmap image = BitmapFactory.decodeFileDescriptor(fileDescriptor); 
     parcelFileDescriptor.close(); 
     return image; 
    } 
+0

我在哪里使用这些代码? –

+0

是不是使用意图打开图库或相机? –

+0

请看看我的代码,只有在点击的时候才显示手机的defalut照片浏览器 –

0

当您从相机后背您拍摄照片或作品库后您的onActivityResult方法调用。因此重写你的onActivityResult像下面

protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     // TODO Auto-generated method stub 
     super.onActivityResult(requestCode, resultCode, data); 
     if (resultCode == RESULT_OK) { 
    //Read your image here and set in your imageView 
} 
    } 

编辑:

设置图像的图像视图

里面的onActivityResult

if(data.getData()==null){ 
    bitmap = (Bitmap)data.getExtras().get("data"); 
}else{ 
    bitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(), data.getData()); 
} 

yourImageView.setImageBitmap(img); 
+0

如何设置图像在此代码我要显示在自定义视图中的图像我做的一类图像视图如何设置图像在本次活动 –

+0

检查我的编辑... – Amsheer

+0

感谢,但我想打开图片时,我点击图库按钮,打开新的活动,在那里,我显示图像 –