如何在活动上下文之外使用startActivityForResult,例如在常规java类
中EX: 在主要活动中,Im调用SampleClass的方法。在这种方法中,我必须打开设备相机并获取图像并进行处理。
问题是控件没有转到SampleClass中的onActivityResult回调方法,而是转到MainActivity中的onActivityResult回调方法。我做错了什么?
我需要能够只处理Sample Class中的图像。我怎样才能实现这个目标
代码段
主要活动:
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
...
...
SampleClass sample = new Sample(this);
sample.openCamera();
}
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode == 0){
if(resultCode == RESULT_OK){
syso("INSIDE MAIN ACTIVITY");
}
if(resultCode == RESULT_CANCELED){
...
}
}
}
}
示例类:
public class SampleClass extends Activity{
private Context context;
public SampleClass(Context context){
this.context = context;
}
public void openCamera(){
Intent photoIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
((Activity) context).startActivityForResult(photoIntent, 0);
}
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode == 0){
if(resultCode == RESULT_OK){
//get the image
// process it.
syso("INSIDE SAMPLE CLASS");
}
if(resultCode == RESULT_CANCELED){
}
}
}
}
如果我运行此程序,控制台上的输出是INSIDE MAIN ACTIVITY。我想要的是能够将INSIDE SAMPLE CLASS作为输出。
谢谢和问候
答案 0 :(得分:2)
而不是使用
SampleClass sample = new Sample(this);
sample.openCamera();
只需使用
Intent intent = new Intent(this, SampleClass .class);
并编写SampleClass onCreate调用openCamera()。
希望这会有所帮助。
答案 1 :(得分:1)
这是不可能的。将在该活动上调用onActivityResuly,该活动已经运行了另一个活动。
因此,如果您使用activity1实例运行另一个活动,则另一个活动将调用activity1.onActivityResult()
答案 2 :(得分:0)
问题是您使用MainActivity Context打开相机!! 肯定会触发MainACtivity的onActivityResult()。
((Activity) context).startActivityForResult(photoIntent, 0);
参见context object = MainActivity检查SimpleClass构造函数。
public SampleClass(Context context){
// when you call from mainActivity and send **this** it means context = MainActivty
this.context = context;
}
如果你想要触发SampleClass onActivityResult(),那么就没有办法扩展Activity 然后把它称为挪威方式......
Intent photoIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
context.startActivityForResult(photoIntent, 0); // context must = SampleClass (); no other way
但如果您仍想在SimpleClass中使用handel图像,请遵循此代码remove extends Activity
SimpleClass 中的
public static void onActivityResult(int requestCode, int resultCode, Intent data) {
if(requestCode == 0){
if(resultCode == RESULT_OK){
//get the image
// process it.
syso("INSIDE SAMPLE CLASS");
}
if(resultCode == RESULT_CANCELED){
}
}
}
并在您的MainActivity类
中protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
SimpleClass.onActivityResult(requestCode,resultCode,data);
}
永远不会使用新关键词从活动中创建新对象Adnroid OS会在您说
时为您做到这一点 Itnent foo = new(context,foo.class);
如果你这样做,这意味着黑客代码和Android操作系统。
我希望你明白并希望这有帮助