我正在使用此代码,但我的onActivityResult永远不会被调用。我曾经提出请求而没有传递将图像保存到SD卡的额外意图,并且工作正常 - onActivityResult()
会按照我的预期被调用。但是因为我添加了SD卡代码 - 没有运气!
我添加(或遗漏)了什么吗?我跟随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 :(得分:4)
我需要补充一下:
photo.getParentFile().mkdirs();
photo.createNewFile();
我认为它失败的原因是因为我试图写入图像的文件不存在。
答案 1 :(得分: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");
}
}
}
答案 2 :(得分:0)
在我的情况下,调用onDestroy
。由于android系统会尝试释放内存(如果我们的应用程序在后台运行,并且我们打开了相机应用程序),并且由于该原因而从未调用onActivityResult
方法,因此请确保您未使用noHistory=true
或intent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY)
例如
// AbcActivity.kt
val intent = Intent(AbcActivity.this, RegistrationForm.class)
intent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY)
startActivity(intent)
// RegistrationForm.kt
val intent = Intent(MediaStore.ACTION_IMAGE_CAPTURE)
// do take pictures, and confirm the photo, never going back to the RegistrationForm, instead back to AbcActivity
通过删除标志和noHistory=true
(在AndroidManifest.xml中)重新创建我的活动并再次调用onActivityResult
,但是我们需要使用ViewModel或(onSaveInstance和onRestoreInstance)保存以前的状态