2016-08-16 138 views
0

我尝试从相机发送图像到我的活动。我叫startActivityForResult从适配器这样的:startActivityForResult返回数据null

photo.setOnClickListener(new View.OnClickListener() { 
         @Override 
         public void onClick(View v) { 
          dialog.dismiss(); 
          mActivity.dispatchTakePictureIntent(part.getId()); 
          } 
       }); 

这里有一个活动是方法:

public void dispatchTakePictureIntent(String id) { 
     Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 

    // Ensure that there's a camera activity to handle the intent 
    if (takePictureIntent.resolveActivity(getPackageManager()) != null) { 
     // Create the File where the photo should go 
     File photoFile = null; 
     try { 
      photoFile = createImageFile(); 
     } catch (IOException ex) { 
      // Error occurred while creating the File 

     } 
     // Continue only if the File was successfully created 
     if (photoFile != null) { 
      Uri photoURI = FileProvider.getUriForFile(this, 
        "com.example.eltegps011.eltegps.fileprovider", 
        photoFile); 
      takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, photoURI); 
      takePictureIntent.putExtra("Id",id); 

      startActivityForResult(takePictureIntent, CAM_REQUEST); 
     } 

    } 
} 

,这是我的onActivityResult();

@Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 
     if (resultCode == 2) { 
      part = (Part) data.getSerializableExtra("Part"); 
      Log.e(TAG, "onActivityResult: "); 

    }if(requestCode == 1313) { 
     Bitmap thumbnail = (Bitmap)data.getExtras().get("data"); 
     String id = data.getStringExtra("Id"); 
     Log.e(TAG, "onActivityResult: " + id); 
    } 

然而,位图的缩略图=(位图)data.getExtras()。获得( “数据”)为空并且resultCode为始终是-1。它看起来像意图不去活动。任何想法为什么?

+0

后续[此](http://stackoverflow.com/a/13977619/5296734)它可帮助您找到解决方案。 –

+0

'//创建文件时发生错误,并且您仍然继续,就好像什么都没有发生。你应该显示吐司这样说,然后返回。 – greenapps

+1

'photoFile = createImageFile()'。除了检查目录是否可写以外,不需要创建该文件。你可以直接删除它。将创建留给相机应用程序。 – greenapps

回答

0

所有版本的全功能演示。

对于捕获和挑选图像

注:点击安卓6.0 GET运行权限,然后procced。

public class MainActivity extends Activity { 

    private ImageView camera, gallery; 
    File photoFile; 
    Uri uri; 
    private final static int RESULT_LOAD_IMAGE = 1; 
    private final static int REQUEST_IMAGE_CAPTURE = 2; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     camera = (ImageView) findViewById(R.id.Img); 
     gallery = (ImageView) findViewById(R.id.imageView); 
     camera.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       dispatchTakePictureIntent(); 

      } 
     }); 
     gallery.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Intent i = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); 
       startActivityForResult(i, RESULT_LOAD_IMAGE); 
      } 
     }); 
    } 

    private void dispatchTakePictureIntent() { 

     Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
     if (takePictureIntent.resolveActivity(getPackageManager()) != null) { 
      photoFile = Environment.getExternalStoragePublicDirectory("/myimage/save.jpg"); 
      if (photoFile != null) { 
       takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, 
         Uri.fromFile(photoFile)); 
       startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE); 
      } 
     } 
    } 

    @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 = data.getData(); 
      String selecteadImage = getRealPathFromURI(this, data.getData()); 
      Toast.makeText(this, "Image path " + selecteadImage, Toast.LENGTH_LONG).show(); 

     } else if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == RESULT_OK) { 

      if (data != null && data.getData() != null) { 
       String selecteadImage = getRealPathFromURI(this, data.getData()); 
       Toast.makeText(this, "Image path " + selecteadImage, Toast.LENGTH_LONG).show(); 
      } else { 
       if (photoFile != null) { 
        String selecteadImage = photoFile.getAbsolutePath(); 
        Toast.makeText(this, "Image path " + selecteadImage, Toast.LENGTH_LONG).show(); 
       } 
      } 
     } 
    } 

    public String getRealPathFromURI(Context context, Uri contentUri) { 
     Cursor cursor = null; 
     try { 
      String[] proj = {MediaStore.Images.Media.DATA}; 
      cursor = context.getContentResolver().query(contentUri, proj, null, null, null); 
      int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA); 
      cursor.moveToFirst(); 
      return cursor.getString(column_index); 
     } finally { 
      if (cursor != null) { 
       cursor.close(); 
      } 
     } 
    } 
} 

清单权限:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
    <uses-permission android:name="android.permission.CAMERA" /> 
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 

activity_main:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:background="@drawable/image_1"> 


    <ImageView 
     android:id="@+id/camera" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_centerHorizontal="true" 
     android:layout_centerVertical="true" 
     android:src="@mipmap/ic_launcher" /> 

    <ImageView 
     android:id="@+id/gallery" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_below="@+id/camera" 
     android:layout_centerHorizontal="true" 
     android:src="@mipmap/ic_launcher" /> 
</RelativeLayout>