2015-01-10 21 views
8

Galeriden veya kameradan görüntü yüklemek için bir diyalog seçmem gereken bir uygulama geliştiriyorum. Burada bir çözüm buldum. Dialog to pick image from gallery or from camera ama problem burada kullanıcı tarafından hangi eylemin seçildiğini karşılaştıran bir çatışma var.Whatsapp editprofile gibi android kamera veya galeri uygulaması için niyet seçici yapmak nasıl?

Bu kodda değişiklik yapıp yapamayacağımı ve galeri veya kamera seçildikten sonra sonuç alabilmem için bir sonuç alıp alamayacağımı bilmek istiyorum.

private void selectImage() { 
    final CharSequence[] items = { "Take Photo", "Choose from Library", 
      "Cancel" }; 

    AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this); 
    builder.setTitle("Add Photo!"); 
    builder.setItems(items, new DialogInterface.OnClickListener() { 
     @Override 
     public void onClick(DialogInterface dialog, int item) { 
      if (items[item].equals("Take Photo")) { 
       Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
       File f = new File(android.os.Environment 
         .getExternalStorageDirectory(), "temp.jpg"); 
       intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(f)); 
       startActivityForResult(intent, REQUEST_CAMERA); 
      } else if (items[item].equals("Choose from Library")) { 
       Intent intent = new Intent(
         Intent.ACTION_PICK, 
         android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); 
       intent.setType("image/*"); 
       startActivityForResult(
         Intent.createChooser(intent, "Select File"), 
         SELECT_FILE); 
      } else if (items[item].equals("Cancel")) { 
       dialog.dismiss(); 
      } 
     } 
    }); 
    builder.show(); 
} 

Şimdi doğru Sonucu ile geri aktiviteye dönüş ihtiyaç seçeneðini kullanarak için

cevap

11

denilen Ana Aktivite Dosyası “Görüntü'yü seçin()” .. yeni yöntem oluşturun. Eğer kamera ile fotoğraf çekmek için startActivityForResult() çağırdığınızda

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    if (resultCode == RESULT_OK) { 
     if (requestCode == REQUEST_CAMERA) { 
      File f = new File(Environment.getExternalStorageDirectory() 
        .toString()); 
      for (File temp : f.listFiles()) { 
       if (temp.getName().equals("temp.jpg")) { 
        f = temp; 
        break; 
       } 
      } 
      try { 
       Bitmap bm; 
       BitmapFactory.Options btmapOptions = new BitmapFactory.Options(); 

       bm = BitmapFactory.decodeFile(f.getAbsolutePath(), 
         btmapOptions); 

       // bm = Bitmap.createScaledBitmap(bm, 70, 70, true); 
       ivImage.setImageBitmap(bm); 

       String path = android.os.Environment 
         .getExternalStorageDirectory() 
         + File.separator 
         + "Phoenix" + File.separator + "default"; 
       f.delete(); 
       OutputStream fOut = null; 
       File file = new File(path, String.valueOf(System 
         .currentTimeMillis()) + ".jpg"); 
       try { 
        fOut = new FileOutputStream(file); 
        bm.compress(Bitmap.CompressFormat.JPEG, 85, fOut); 
        fOut.flush(); 
        fOut.close(); 
       } catch (FileNotFoundException e) { 
        e.printStackTrace(); 
       } catch (IOException e) { 
        e.printStackTrace(); 
       } catch (Exception e) { 
        e.printStackTrace(); 
       } 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
     } else if (requestCode == SELECT_FILE) { 
      Uri selectedImageUri = data.getData(); 

      String tempPath = getPath(selectedImageUri, MainActivity.this); 
      Bitmap bm; 
      BitmapFactory.Options btmapOptions = new BitmapFactory.Options(); 
      bm = BitmapFactory.decodeFile(tempPath, btmapOptions); 
      ivImage.setImageBitmap(bm); 
     } 
    } 
} 

) (onActivity içinde

public String getPath(Uri uri, Activity activity) { 
    String[] projection = { MediaColumns.DATA }; 
    Cursor cursor = activity 
      .managedQuery(uri, projection, null, null, null); 
    int column_index = cursor.getColumnIndexOrThrow(MediaColumns.DATA); 
    cursor.moveToFirst(); 
    return cursor.getString(column_index); 
} 
+0

bunu takip edin daha fazla fikir verecektir http://www.theappguruz.com/blog/android-take-photo-camera-gallery-code-sample/ –

+0

getPath (Uri uri, Context context) ne yapar? Etkinliğimde kullanamam. – EduardoMaia

+0

Keşke kodunuzu görebilmeyi dilerim –

5

Sadece bir tavsiye bu yöntemi ekleyin:

startActivityForResult() yöntemi ile korunmaktadır Bildirimi o
Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
if (cameraIntent.resolveActivity(getPackageManager()) != null) { 
     startActivityForResult(cameraIntent, REQUEST_CAMERA); 
} 

Niyeti kaldırabilen ilk etkinlik bileşenini döndüren resolveActivity() numaralı çağrıyı yapan bir koşul. Uygulamanın başaramayacağı bir amaç kullanarak startActivityForResult() numaralı telefonu arayarak uygulamanızın çökmesi nedeniyle bu kontrolün gerçekleştirilmesi önemlidir. Sonuç null değeri olmadığı sürece, niyetini kullanmak güvenlidir.

İlgili konular