Java 两个onActivityResult冲突android
我有两个活动,TakePictureActivity和ChooseSpictivity,它们都会导致困惑活动 如您所见,第一个活动启动启动相机的意图,允许您拍照并启动活动 第二个活动访问图库,允许您选择图片并启动拼图活动 在Puzzle活动中,调用createScaledBitmap方法生成位图 以下是TakePictureActivity:Java 两个onActivityResult冲突android,java,android,get,onactivityresult,Java,Android,Get,Onactivityresult,我有两个活动,TakePictureActivity和ChooseSpictivity,它们都会导致困惑活动 如您所见,第一个活动启动启动相机的意图,允许您拍照并启动活动 第二个活动访问图库,允许您选择图片并启动拼图活动 在Puzzle活动中,调用createScaledBitmap方法生成位图 以下是TakePictureActivity: public final class PuzzleActivity extends Activity implements OnClickListener
public final class PuzzleActivity extends Activity implements OnClickListener{
private Bitmap bitmap; // temporary holder for puzzle picture
public static Chronometer chrono;
static TextView tv1;
static EditText et1;
Button button;
private static Context mContext;
//TODO onCreate
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
setContentView(R.layout.board);
mContext = this;
tv1 = (TextView) findViewById(R.id.movecount_display);
if(DecidePicActivity.choosepic){
try {
bitmap = createScaledBitmap(ChoosePicActivity.imageUri);
} catch (FileNotFoundException e) {
showDialog(DIALOG_PICASA_ERROR_ID);
} catch (IOException e) {
e.printStackTrace();
finish();
} catch (IllegalArgumentException e) {
showDialog(DIALOG_PICASA_ERROR_ID);
}
createGameBoard(getGridSize());
}
else if(DecidePicActivity.takepic){
try {
bitmap = createScaledBitmap(TakePictureActivity.imageUri);
} catch (FileNotFoundException e) {
showDialog(DIALOG_PICASA_ERROR_ID);
} catch (IOException e) {
e.printStackTrace();
finish();
} catch (IllegalArgumentException e) {
showDialog(DIALOG_PICASA_ERROR_ID);
}
createGameBoard(getGridSize());
}
TileView.moveDetector = new GestureDetectorCompat(this, new MyGestureListener());
Button pauseButton = (Button) findViewById(R.id.pause_button);
pauseButton.setOnClickListener(this);
以下是ChoosePicActivity:
public class ChoosePicActivity extends Activity {
String mCurrentPhotoPath;
public static final int IMAGEREQUESTCODE = 8242008;
static final int REQUEST_TAKE_PHOTO = 1;
public static final int DIALOG_PICASA_ERROR_ID = 0;
private static String DEBUG_TAG1 = "ChoosePicA";
private Bitmap bitmap;
public static Uri imageUri;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
selectImageFromGallery();
}
/* (non-Javadoc)
* Will start an intent for external Gallery app.
* Image returned via onActivityResult().
*/
private void selectImageFromGallery() {
Intent galleryIntent = new Intent(Intent.ACTION_PICK,
MediaStore.Images.Media.INTERNAL_CONTENT_URI);
startActivityForResult(galleryIntent, IMAGEREQUESTCODE);
}
//TODO onActivityResult
/* (non-Javadoc)
* Run when Gallery app returns selected image.
*/
@Override
protected final void onActivityResult(final int requestCode, final int resultCode, final Intent i) {
//super.onActivityResult(requestCode, resultCode, i);
if (resultCode == RESULT_OK) {
Log.d(DEBUG_TAG1,"ChoosePic onActivityResult ");
switch (requestCode) {
case IMAGEREQUESTCODE:
imageUri = i.getData();
Log.d(DEBUG_TAG1,"intent choose pic: " + i);
Intent i1 = new Intent(this, PuzzleActivity.class);
startActivity(i1);
break;
} // end switch
} // end if
}
}
以下是活动:
public final class PuzzleActivity extends Activity implements OnClickListener{
private Bitmap bitmap; // temporary holder for puzzle picture
public static Chronometer chrono;
static TextView tv1;
static EditText et1;
Button button;
private static Context mContext;
//TODO onCreate
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
setContentView(R.layout.board);
mContext = this;
tv1 = (TextView) findViewById(R.id.movecount_display);
if(DecidePicActivity.choosepic){
try {
bitmap = createScaledBitmap(ChoosePicActivity.imageUri);
} catch (FileNotFoundException e) {
showDialog(DIALOG_PICASA_ERROR_ID);
} catch (IOException e) {
e.printStackTrace();
finish();
} catch (IllegalArgumentException e) {
showDialog(DIALOG_PICASA_ERROR_ID);
}
createGameBoard(getGridSize());
}
else if(DecidePicActivity.takepic){
try {
bitmap = createScaledBitmap(TakePictureActivity.imageUri);
} catch (FileNotFoundException e) {
showDialog(DIALOG_PICASA_ERROR_ID);
} catch (IOException e) {
e.printStackTrace();
finish();
} catch (IllegalArgumentException e) {
showDialog(DIALOG_PICASA_ERROR_ID);
}
createGameBoard(getGridSize());
}
TileView.moveDetector = new GestureDetectorCompat(this, new MyGestureListener());
Button pauseButton = (Button) findViewById(R.id.pause_button);
pauseButton.setOnClickListener(this);
}
问题是:
我可以选择PicActivity,我可以从图库中选择一张图片,开始进入拼图活动,并用所选图片创建缩放位图。
在这里之前一切都好
然后,拼图活动完成,我开始拍摄PictureActivity,相机启动,我拍摄了一张照片,开始打算进行拼图活动,然后生成的缩放位图使用之前在ChoosePicActivity中选择的图像,留下最近拍摄的照片,这是应该用于生成缩放位图的图片
另一方面,如果启动TakePictureActivity时未选择先前启动的PicActivity,则拍摄的照片将用于生成缩放位图,如预期的那样
我希望我的解释能让你理解我的问题。谁能给点光吗
我不确定是否有2倍的方法onActivityResult是正确的,或者是否有不同的线程冲突,或者可能方法I.getdata在获取正确的意图id时遇到问题。。。我有点迷路了。问题是由DecidePicActivity.choosepic和DecidePicActivity.takepic引起的
以前,决策活动是这样的:
public class DecidePicActivity extends Activity implements OnClickListener{
static boolean takepic = false;
static boolean choosepic = false;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
setContentView(R.layout.decidepic);
findViewById(R.id.take_pic_button).setOnClickListener(this);
findViewById(R.id.choose_pic_button).setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch(v.getId()) {
case R.id.take_pic_button:
takepic = true;
Intent i1 = new Intent(this, TakePictureActivity.class);
startActivity(i1);
break;
case R.id.choose_pic_button:
choosepic = true;
Intent i2 = new Intent(this, ChoosePicActivity.class);
startActivity(i2);
break;
}
}
@Override
public void onClick(View v) {
switch(v.getId()) {
case R.id.take_pic_button:
takepic = true;
choosepic = false;
Intent i1 = new Intent(this, TakePictureActivity.class);
startActivity(i1);
break;
case R.id.choose_pic_button:
choosepic = true;
takepic = false;
Intent i2 = new Intent(this, ChoosePicActivity.class);
startActivity(i2);
break;
}
}
}
takepic和choosepic未正确重新初始化
现在,onClick in DecidePiActivity活动如下所示:
public class DecidePicActivity extends Activity implements OnClickListener{
static boolean takepic = false;
static boolean choosepic = false;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
setContentView(R.layout.decidepic);
findViewById(R.id.take_pic_button).setOnClickListener(this);
findViewById(R.id.choose_pic_button).setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch(v.getId()) {
case R.id.take_pic_button:
takepic = true;
Intent i1 = new Intent(this, TakePictureActivity.class);
startActivity(i1);
break;
case R.id.choose_pic_button:
choosepic = true;
Intent i2 = new Intent(this, ChoosePicActivity.class);
startActivity(i2);
break;
}
}
@Override
public void onClick(View v) {
switch(v.getId()) {
case R.id.take_pic_button:
takepic = true;
choosepic = false;
Intent i1 = new Intent(this, TakePictureActivity.class);
startActivity(i1);
break;
case R.id.choose_pic_button:
choosepic = true;
takepic = false;
Intent i2 = new Intent(this, ChoosePicActivity.class);
startActivity(i2);
break;
}
}
问题解决了