2016-05-10 3 views
2

Ich versuche, Foto von Kamera, Galerie und Google Fotos hochladen. ohne Kamera-Code-Galerie und Google Fotos funktioniert ordnungsgemäß, aber wenn ich den Code für die Kamera Intent gibt nicht das Ergebnis als -1 und Galerie und Google Fotos ist auch nicht richtig funktioniert :: es kopiert das Bild in einen anderen Ordner aber müssen Sie die App verlassen, um das Bild in der Bildansicht erneut anzuzeigen. hier ist mein CodeKamera und Galerie Absicht, Bild und Kopie in einem anderen Ordner in Android

final CharSequence[] options = { "Take Photo", "Choose from Gallery","Cancel" }; 
        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); 
        builder.setTitle("Select Picture"); 
        builder.setItems(options, new DialogInterface.OnClickListener() { 
         @Override 
         public void onClick(DialogInterface dialog, int item) { 
          if (options[item].equals("Take Photo")) 
          { 
           Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
           imageUri = getImageUri(); 
           cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri); 
//          Intent cameraIntent = getCameraIntent(); 
            startActivityForResult(cameraIntent, 2); 

          } 
          else if (options[item].equals("Choose from Gallery")) 
          { 
           if (Build.VERSION.SDK_INT <= 19) { 
            Intent intent = new Intent(); 
            intent.setType("image/*"); 
            intent.setAction(Intent.ACTION_GET_CONTENT); 
            intent.addCategory(Intent.CATEGORY_OPENABLE); 
            startActivityForResult(Intent.createChooser(intent, "Select Picture"), PICK_IMAGE_REQUEST); 
           } else if (Build.VERSION.SDK_INT > 19) { 
            Intent intent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); 
            startActivityForResult(Intent.createChooser(intent, "Select Picture"), PICK_IMAGE_REQUEST); 


           } 
          } 
          else if (options[item].equals("Cancel")) { 
           dialog.dismiss(); 
          } 
         } 
        }); 
        builder.show(); 

hier ist der Code für das Aktivitätsergebnis

public void onActivityResult(int requestCode, int resultCode, Intent data) 
{ 
    super.onActivityResult(requestCode, resultCode, data); 
    String selectedImagePath=null; 
    if (requestCode == PICK_IMAGE_REQUEST && resultCode == getActivity().RESULT_OK && null != data) { 
     Uri selectedImageUri = data.getData(); 
     selectedImagePath = getRealPathFromURIForGallery(selectedImageUri); 
     decodeFile(selectedImagePath); 
    }else if(requestCode==2&&resultCode==getActivity().RESULT_OK &&data!=null){ 
     Uri selectedImageUri = data.getData(); 
     selectedImagePath = getRealPathFromURIForGallery(selectedImageUri); 
     decodeFile(selectedImagePath); 
     Bitmap photo = (Bitmap) data.getExtras().get("data"); 
     imageView.setImageBitmap(photo); 
     Log.d("uri",selectedImagePath+":"+selectedImageUri); 
    } 
} 

Code, um das Bild

try { 
     File sd = Environment.getExternalStorageDirectory(); 
     File directory = Environment.getExternalStorageDirectory(); 
     String destinationPath = Environment.getExternalStorageDirectory().toString() + "/IASFolders/"+Configuration.empcode+".jpg"; 
     if (sd.canWrite()) { 
      File source= finalFile; 
      File destination= new File(destinationPath); 
      if (source.exists()) { 
       FileChannel src = new FileInputStream(source).getChannel(); 
       FileChannel dst = new FileOutputStream(destination).getChannel(); 
       dst.transferFrom(src, 0, src.size()); 
       src.close(); 
       dst.close(); 
      }else { 
       FileChannel src = new FileInputStream(source).getChannel(); 
       FileChannel dst = new FileOutputStream(destination).getChannel(); 
       dst.transferFrom(src, 0, src.size()); 
       src.close(); 
       dst.close(); 
      } 
     } 
    } 
    catch (Exception e) { 
     e.printStackTrace(); 
    } 

nach dst.close() ist es immer, aber nicht kopieren zu kopieren alles

Antwort

3

Versuchen Sie dies ... (Getestet)

private static final int PICK_IMAGE = 1; 
    private static final int REQUEST_CAMERA = 2; 

      final String[] items = new String[]{"Camera", "Gallery"}; 
    new AlertDialog.Builder(getActivity()).setTitle("Select Picture") 
    .setItems(options, new DialogInterface.OnClickListener() { 
     public void onClick(DialogInterface dialog, int item) { 
      if (items[item].equals("Camera")) { 
       Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
        startActivityForResult(intent, REQUEST_CAMERA); 
       } else if (items[item].equals("Gallery")) { 
       if (Build.VERSION.SDK_INT <= 19) { 
        Intent intent = new Intent(); 
        intent.setType("image/*"); 
        intent.setAction(Intent.ACTION_GET_CONTENT); 
        intent.addCategory(Intent.CATEGORY_OPENABLE); 
        startActivityForResult(Intent.createChooser(intent, "Select Picture"), PICK_IMAGE); 
       } else if (Build.VERSION.SDK_INT > 19) { 
        Intent intent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); 
        startActivityForResult(Intent.createChooser(intent, "Select Picture"), PICK_IMAGE); 
       } 
      }else if (options[item].equals("Cancel")) { 
           dialog.dismiss(); 
          } 
     } 
    }).show(); 

Code für Aktivitätsergebnis

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

      if (requestCode == PICK_IMAGE && resultCode == getActivity().RESULT_OK && null != data) { 
       Uri selectedImageUri = data.getData(); 
       String selectedImagePath = getRealPathFromURIForGallery(selectedImageUri); 
       decodeFile(selectedImagePath); 
      } else if (requestCode == REQUEST_CAMERA && resultCode == getActivity().RESULT_OK && null != data) { 
       Bitmap photo = (Bitmap) data.getExtras().get("data"); 
       profileImage.setImageBitmap(photo); 

       // CALL THIS METHOD TO GET THE URI FROM THE BITMAP 
       Uri tempUri = getImageUri(getActivity().getApplicationContext(), photo); 

       // CALL THIS METHOD TO GET THE ACTUAL PATH 
       File finalFile = new File(getRealPathFromURI(tempUri)); 
       decodeFile(finalFile.toString()); 
      } 
     } 
public String getRealPathFromURIForGallery(Uri uri) { 
     if (uri == null) { 
      return null; 
     } 
     String[] projection = {MediaStore.Images.Media.DATA}; 
     Cursor cursor = getActivity().getContentResolver().query(uri, projection, null, null, null); 
     if (cursor != null) { 
      int column_index = cursor 
        .getColumnIndexOrThrow(MediaStore.Images.Media.DATA); 
      cursor.moveToFirst(); 
      return cursor.getString(column_index); 
     } 
     return uri.getPath(); 
    } 

    public Uri getImageUri(Context inContext, Bitmap inImage) { 
     ByteArrayOutputStream bytes = new ByteArrayOutputStream(); 
     inImage.compress(Bitmap.CompressFormat.JPEG, 100, bytes); 
     String path = MediaStore.Images.Media.insertImage(inContext.getContentResolver(), inImage, "Title", null); 
     return Uri.parse(path); 
    } 

    public String getRealPathFromURI(Uri uri) { 
     Cursor cursor = getActivity().getContentResolver().query(uri, null, null, null, null); 
     cursor.moveToFirst(); 
     int idx = cursor.getColumnIndex(MediaStore.Images.ImageColumns.DATA); 
     return cursor.getString(idx); 
    } 
+0

Dank Es arbeitet für Bild auswählen und ich auch den Weg bekommen, aber nicht in der Lage, das Bild zu kopieren. Siehe den aktualisierten Code zum Kopieren des Bildes –

+0

Was ist getActivity(); Hier –

Verwandte Themen