2016-08-16 15 views
2

私は機能の1つがギャラリーからまたはカメラから写真を撮ることになっているアンドロイドアプリを構築しています。私はすべてのデバイスで動作するように問題があります。私はすべてのアンドロイド版とすべてのデバイスのための適切な解決策を見つけることができません。私はインターネット上のすべてを検索し、私が見つけたすべてのコードを試したが、成功していないすべてのコードを試したような気がする。私は公式のアンドロイドのドキュメントからコードを実装しようとしましたが、同じ問題です。ギャラリーからのピッキングは機能しているようですが、カメラはうまく動作しません。誰かが私にチップ、リンク、コードを教えてください。どうすればいいですか?私は文字通りこれをしようとしている神経を失った。私はかなり新しいアンドロイドです...Androidのカメラと写真のピッカーの意図

私はギャラリーとカメラの両方の意図が必要です。あなたはこのようないくつかのことを行うことができます

+0

もちろん、コードを表示してどこが間違っているかを正確に伝える必要があります。あなたはgetPathFromURIカーソルのようなものなしですべきです。あなただけが良いコードを持っています。多くのコードを投稿しないことをお勧めします。 1つのインテントから始めます。 – greenapps

答えて

2

ような何かを行うことができ、私は解決策を見つけました。実際には、私はすべての携帯電話とすべてのアンドロイド版で動作するライブラリを見つけました。それでも解決策が必要な人がいれば、ここに答えがあります。

EasyImage仕事をしました!

+0

カメラキャプチャした画像をメールの意図と共有しているときに問題が発生しているため、7.0と動作しますか –

+1

@AdeelTurkはい、あります。 4.4.2,5.0,6.0,7.0,7.1でテスト済み –

+0

ありがとうalot @lgor –

1
public String getPathFromURI(Uri contentUri) { 
    String res = null; 
    String[] proj = {MediaStore.Images.Media.DATA}; 
    Cursor cursor = getActivity().getContentResolver().query(contentUri, proj, "", null, ""); 
    if (cursor.moveToFirst()) { 
     int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA); 
     res = cursor.getString(column_index); 
    } 
    cursor.close(); 
    return res; 
} 


@Override 
public void onActivityResult(int requestCode, int resultCode, Intent imageReturnedIntent) { 
    super.onActivityResult(requestCode, resultCode, imageReturnedIntent); 
    if (resultCode == getActivity().RESULT_OK) { 
     if (requestCode == 200) { 
      Uri selectedImageUri = imageReturnedIntent.getData(); 
      if (null != selectedImageUri) { 
       String path = getPathFromURI(selectedImageUri); 
       DrawerAdapter.imageViewPP.setImageURI(selectedImageUri); 
      } 
     }else if(requestCode==0){ 
      Uri selectedImageUri = imageReturnedIntent.getData(); 
      if (null != selectedImageUri) { 
       String path = getPathFromURI(selectedImageUri); 
       //DrawerAdapter.imageViewPP.setImageURI(selectedImageUri); 
      } 
     } 
    } 
} 

    public String getPathFromURI(Uri contentUri) { 
    String res = null; 
    String[] proj = {MediaStore.Images.Media.DATA}; 
    Cursor cursor = getActivity().getContentResolver().query(contentUri, proj, "", null, ""); 
    if (cursor.moveToFirst()) { 
     int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA); 
     res = cursor.getString(column_index); 
    } 
    cursor.close(); 
    return res; 
} 

Intent intent1 = new Intent(); 
intent.setType("image/*"); 
intent.setAction(Intent.ACTION_GET_CONTENT); 
startActivityForResult(Intent.createChooser(intent, "Select Picture"), 200); 

Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
startActivityForResult(intent, 0); 
+0

私はこのコードを使用しており、私にとってはうまく動作しています – Nirmit

+0

私はこのコードを試しました。ギャラリーはうまくいくようですが、カメラはまったく動作しません。 Uri selectedImageUri = imageReturnedIntent.getData()は常にnullです。 –

1

、ActivityResult上

private static String[] PERMISSIONS_STORAGE = { 
      Manifest.permission.READ_EXTERNAL_STORAGE, 
      Manifest.permission.WRITE_EXTERNAL_STORAGE 
    }; 




//Define Button in the Xml file and get them 
Button galleryButton= (Button)findViewById(R.id.gallerybutton); 
Button cameraButton= (Button)findViewById(R.id.camerabutton); 

//Listener's on the button 
galleryButton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      Intent galleryIntent = new Intent(Intent.ACTION_PICK,        android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); 
      // Start the Intent 
      startActivityForResult(galleryIntent, PICK_FROM_GALLARY); 
     } 
    }); 



    cameraButton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      //Camera permission required for Marshmallow version 

       // permission has been granted, continue as usual 
       Intent captureIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
       File file = new File(Environment.getExternalStorageDirectory(), "MyPhoto.jpg"); 
       outPutfileUri = Uri.fromFile(file); 
       captureIntent.putExtra(MediaStore.EXTRA_OUTPUT, outPutfileUri); 
       startActivityForResult(captureIntent, PICK_FROM_CAMERA); 
      } 
     } 
    }); 

そして、マシュマロのOSで使用すると、画像を取得します//ランタイムPermisionの場合のように

private static final int PICK_FROM_CAMERA = 1; 
private static final int PICK_FROM_GALLARY = 2; 


Uri outPutfileUri; 

public void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 

     switch (requestCode) { 
      case PICK_FROM_CAMERA: 
       if (resultCode == Activity.RESULT_OK) { 
        //pic coming from camera 
        Bitmap bitmap=null; 
        try { 
        bitmap = MediaStore.Images.Media.getBitmap(getActivity().getContentResolver(), outPutfileUri); 
       } catch (IOException e) { 
        e.printStackTrace(); 
       } 

       } 
      break; 

      case PICK_FROM_GALLARY: 

       if (resultCode == Activity.RESULT_OK) { 
        //pick image from gallery 
        Uri selectedImage = data.getData(); 
        String[] filePathColumn = { MediaStore.Images.Media.DATA }; 

        // Get the cursor 
        Cursor cursor = getActivity().getContentResolver().query(selectedImage, filePathColumn, null, null, null); 
        // Move to first row 
        cursor.moveToFirst(); 

        int columnIndex = cursor.getColumnIndex(filePathColumn[0]); 
        String imgDecodableString = cursor.getString(columnIndex); 
        cursor.close(); 
        bitmap = BitmapFactory.decodeFile(imgDecodableString); 




       } 
      break; 
     } 
    } 

は、//マシュマロデバイスのAndroid 7.0

cameraButton.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       //Camera permission required for Marshmallow version 
       if (ActivityCompat.checkSelfPermission(getContext(), Manifest.permission.CAMERA) 
         != PackageManager.PERMISSION_GRANTED) { 
        // Callback onRequestPermissionsResult interceptadona Activity MainActivity 
        ActivityCompat.requestPermissions(getActivity(), new String[]{Manifest.permission.CAMERA}, PICK_FROM_CAMERA); 
       } else { 
        // permission has been granted, continue as usual 
        Intent captureIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
        startActivityForResult(captureIntent, PICK_FROM_CAMERA); 
       } 
      } 
     }); 


//Gallery storage permission required for Marshmallow version 
    public static void verifyStoragePermissions(Activity activity) { 
     // Check if we have write permission 
     int permission = ActivityCompat.checkSelfPermission(activity, Manifest.permission.WRITE_EXTERNAL_STORAGE); 

     if (permission != PackageManager.PERMISSION_GRANTED) { 
      // We don't have permission so prompt the user 
      ActivityCompat.requestPermissions(
        activity, 
        PERMISSIONS_STORAGE, 
        REQUEST_EXTERNAL_STORAGE 
      ); 
     } 
    } 

//のためには、一年のほぼ半分の後その

ContentValues values = new ContentValues(1); 
     values.put(MediaStore.Images.Media.MIME_TYPE, "image/jpg"); 
     outPutfileUri = getActivity().getContentResolver() 
       .insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values); 

Intent captureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
    captureIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION 
     | Intent.FLAG_GRANT_WRITE_URI_PERMISSION); 

     captureIntent.putExtra(MediaStore.EXTRA_OUTPUT, outPutfileUri); 
     startActivityForResult(captureIntent, PICK_FROM_CAMERA); 
+0

それは良くありません。デバイスに保存されていない画像(Googleフォトから)では動作しません。カメラの意図はサムネイルだけを返します。 –

+0

カメラから完全な画像を取得したい場合は、最初に保存してからそれを元に戻す必要があります。 –

+0

私は知っていますが、どうすればよいか分かりません。だから私はここで尋ねた。 –

関連する問題