2014-01-29 47 views
2

我正在使用此代碼,但我的onActivityResult永遠不會被調用。我曾經提出請求,但沒有通過額外的意圖將圖像保存到SD卡,並且工作正常 - onActivityResult()會按照我的預期調用。但是因爲我添加了SD卡代碼 - 沒有運氣!在Android中拍攝照片後未調用onActivityResult

我添加了(或錯過)了一些東西嗎?我以https://stackoverflow.com/a/12277455/2884981爲例。

這裏是我的代碼,

static final int CAPTURE_IMAGE_CALLBACK = 1; 

    private void dispatchTakePictureIntent() 
    { 
    Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 

    File photo = null; 
    String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date()); 

     if (android.os.Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED)) 
     { 
      photo = new File(android.os.Environment.getExternalStorageDirectory(), "myapp/images/" + File.separator + timeStamp + ".png"); 
     } 
     else 
     { 
      photo = new File(getCacheDir(), "myapp/images/" + File.separator + timeStamp + ".png"); 
     } 
     if (photo != null) 
     { 
      takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(photo)); 
     } 

     if (takePictureIntent.resolveActivity(getPackageManager()) != null) 
     { 
      startActivityForResult(takePictureIntent, CAPTURE_IMAGE_CALLBACK); 
     } 
    } 

    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) 
    { 
     // This never gets hit! 
     if (requestCode == CAPTURE_IMAGE_CALLBACK) 
     { 
       // etc 

我只是想我要補充,相機內部應用程序,一旦我點擊打勾 - 什麼也沒有發生。我反覆點擊勾號,它只停留在相機屏幕上。控制永遠不會返回到主應用程序。

+0

我已經回答了這個問題之前 看看: http://stackoverflow.com/a/30266776/1531683 –

回答

4

我需要補充一點:

photo.getParentFile().mkdirs(); 
    photo.createNewFile(); 

我認爲這是失敗的原因是因爲該文件我試圖寫圖像不存在。

+0

爲我工作! –

+1

這兩行代碼應放在哪裏?在onActivityResult裏面? –

+0

在'dispatchTakePictureIntent()'裏面,我在'if(photo!= null)'區域添加了它。 – b85411

0

我用這樣的事情,它工作正常:

public class MainActivity extends Activity implements OnClickListener { 

Button btnTackPic; 
Bitmap bitMap; 
static int TAKE_PICTURE = 1; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    // Setup camera ready for picture clicking 

    // add onclick listener to the button 
    btnTackPic.setOnClickListener(this); 

} 

// Take pic 
@Override 
public void onClick(View view) { 

    // create intent with ACTION_IMAGE_CAPTURE action 
    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 

    // start camera activity 
    startActivityForResult(intent, TAKE_PICTURE); 

} 

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent intent) { 

    if (requestCode == TAKE_PICTURE && resultCode== RESULT_OK && intent != null){ 
     // get bundle 
     Bundle extras = intent.getExtras(); 

     // get bitmap 
     bitMap = (Bitmap) extras.get("data"); 
    } 
} 

}

+0

嗨。是的,我可以做同樣的事情,只有當我添加SD卡代碼時,我遇到了麻煩。而且我需要SD卡代碼才能正常工作,並且可以像閱讀縮略圖一樣讀取數據。 – b85411

+0

拍攝照片後,您的SD卡代碼是否應該完成?即將該代碼移動到onActivityResult方法中,然後確保您有要保存的照片。 –

+0

不,你需要傳遞你想要保存SD卡的文件。然後我相信該照片的高分辨率副本將被保存到該文件中。如果您在將圖像返回到onActivityResult後嘗試並保存到SD卡,則會留下低分辨率的位圖/縮略圖。 (無論如何,我相信這是事實,我可以確認一旦我得到這個工作!!) – b85411