Android 在onCreate中启动摄像头导致间歇性问题
我试图找到在MainActivity中实现按钮的最佳方法,该按钮启动camera活动并将图像返回到另一个活动。基本上,它会将图像返回给活动,以向图像添加描述。。。我认为一个好主意是在按下相机按钮时启动单个照片查看活动,并在执行任何其他操作之前从新活动启动相机活动以获取结果;但我有一个间歇性的问题,有时相机会卡在一个环路中 也许有更好的方法?我是否应该首先启动相机活动以获取结果,然后将图像作为意图传递 以下是我现在拥有的:Android 在onCreate中启动摄像头导致间歇性问题,android,android-intent,android-activity,android-camera,Android,Android Intent,Android Activity,Android Camera,我试图找到在MainActivity中实现按钮的最佳方法,该按钮启动camera活动并将图像返回到另一个活动。基本上,它会将图像返回给活动,以向图像添加描述。。。我认为一个好主意是在按下相机按钮时启动单个照片查看活动,并在执行任何其他操作之前从新活动启动相机活动以获取结果;但我有一个间歇性的问题,有时相机会卡在一个环路中 也许有更好的方法?我是否应该首先启动相机活动以获取结果,然后将图像作为意图传递 以下是我现在拥有的: @Override public boolean onOptionsIt
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}else if ( id == R.id.menu_rules ){
Intent rulesIntent = new Intent(this, RulesActivity.class);
startActivity(rulesIntent);
return true;
}else if ( id == R.id.menu_import_photo ){
//pull in an image from the gallery
return true;
}else if ( id == R.id.menu_item_new_photo ){
startActivity(new Intent(MainActivity.this, SinglePhotoViewActivity.class));
}
return super.onOptionsItemSelected(item);
}
以及接收活动
public class SinglePhotoViewActivity extends Activity {
private static final String LOG_TAG = "Simple Camera App";
private static int TAKE_PICTURE = 1001;
private ImageView imageView;
private Uri imageUri;
private Bitmap bitmap;
private TextView textView;
private EditText editText;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_single_photo_view);
if ( bitmap == null )
takePhoto();
}
public void takePhoto(){
Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");
File photo = new File(Environment
.getExternalStoragePublicDirectory(Environment
//this will continually overwrite the same file
//need to implement a date/ time string
//to save as file name.
.DIRECTORY_PICTURES), "pic.jpg");
intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(photo));
imageUri = Uri.fromFile(photo);
startActivityForResult(intent, TAKE_PICTURE);
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
switch(requestCode) {
case 1001:
if(resultCode == Activity.RESULT_OK) {
getContentResolver().notifyChange(imageUri, null);
imageView = (ImageView )findViewById(R.id.ivCameraImageView);
ContentResolver contentResolver = getContentResolver();
try {
bitmap = android.provider.MediaStore.Images.Media.getBitmap(contentResolver,
imageUri);
imageView.setImageBitmap(bitmap);
} catch(Exception e) {
Toast.makeText(SinglePhotoViewActivity.this, "failed to load",
Toast.LENGTH_LONG).show();
Log.e(LOG_TAG, e.toString());
}
}
}
}
}
您的情况与启动
ACTION\u IMAGE\u CAPTURE
intent(参见示例)时经常发生的情况类似
原因是系统可能决定销毁调用者活动(在您的情况下为SinglePhotoViewActivity
),并在启动的活动(在您的情况下为system Camera activity)返回结果后重新创建
最终的解决方案是在调用活动中实现onSaveInstanceState(Bundle)
。但在你的具体情况下,有一条捷径。检查onCreate()
中的意图,如果它来自main活动,则启动摄像头。否则,继续操作,就好像您现在就要收到activityresult()
一样