2010-12-23 18 views
5

Resim çekip küçük resmini gösteren bir program yapıyorum. Emülatör kullanıldığında her şey iyi gider ve atma düğmesi fotoğrafı siler. Ancak gerçek bir cihazda, fotoğraf makinesi, görüntüyü imageUri değişkenine ve kamera açıp kendi başına bir fotoğraf çekmiş olsaydım, sanki adlandırılan ikinci görüntüye kaydeder.Android Camera, iki dosya oluşturmayı amaçlamaktadır

private static final int CAMERA_PIC_REQUEST = 1337; 
/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.camera); 

    //start camera 
    values = new ContentValues(); 
    values.put(MediaStore.Images.Media.TITLE, "New Picture"); 
    values.put(MediaStore.Images.Media.DESCRIPTION,"From your Camera"); 
    imageUri = getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values); 
    image = (ImageView) findViewById(R.id.ImageView01); 
    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
    intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri); 
    startActivityForResult(intent, CAMERA_PIC_REQUEST); 


    //save the image buttons 
    Button save = (Button) findViewById(R.id.Button01); 
    Button close = (Button) findViewById(R.id.Button02); 
} 

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if (requestCode == CAMERA_PIC_REQUEST && resultCode == RESULT_OK) { 
     try{ 
      thumbnail = MediaStore.Images.Media.getBitmap(getContentResolver(), imageUri); 
      image.setImageBitmap(thumbnail); 
     } 
     catch(Exception e){ 
      e.printStackTrace(); 
     } 
    } 
    else{ 
     finish(); 
    } 
} 

public void myClickHandler(View view) { 
    switch (view.getId()) { 
    case R.id.Button01: 
     finish(); 
     break; 
    case R.id.Button02: 
     dicard(); 
    } 
} 

private void dicard(){ 
    getContentResolver().delete(imageUri, null, null); 
    finish(); 
} 
+0

Programı HTC Incredible üzerinde test ettim ve gayet iyi çalışıyor. Bu LG ALLY telefonları ile bilinen bir sorun mu? –

cevap

1

Bazı Android telefonlar, orijinal fotoğrafı galeride ve yalnızca bulunduğunuz konumdaki küçük resimleri depolar. Orijinal isteğiyle yaptığınız şey önemli değil. Bunu yaparken iki farklı HTC cep telefonum var ve bunu yapmayan diğer markalar.

Bunu başka bir şekilde çözdüm. Galerideki her öğenin bir sorgusunu çalıştırdım ve BucketID'leri bir diziye yükledim. Uygulamam kamera uygulamasını başlattığında bunu yapıyorum. Kamera uygulaması döndüğünde, aynı sorguyu yaparım (zaman kazanmak için son eklenen öğelerle). Bunu orijinal listemle karşılaştırdım ve yeni BucketID'i buldum. Ardından, bu görüntünün boyutunu, çıktı olarak belirttiğim dosyayla karşılaştırıyorum. Eğer daha büyükse, kopyalarımı, sahip olduğum şeyi değiştirdim. Ardından dosyayı sildim ve galeriden kaldırdım.

Bilirsiniz!

[EDIT] Benzersiz kova kimliklerini saklamayan bir telefon keşfettiğimde bunu tekrar değiştirmek zorunda kaldım ... Daha fazla bilgi için bu yanıtı takip eden bağlantıda yer alan gönderiye bakın.

+0

Bu cevabı http://stackoverflow.com/questions/6390163/deleting-a-gallery-image-after-camera-intent-photo-taken adres kodunda gönderirseniz, sizin için 500 puanlık bir lütuf vardır. –

+0

Burada güncelleyeceğim. – Paul