繁体   English   中英

startActivityForResult退出活动

[英]startActivityForResult out an activity

如何在常规Java类中的活动上下文之外使用startActivityForResult

例:在主要活动中,我调用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作为输出。

谢谢并恭祝安康

而不是使用

 SampleClass sample = new Sample(this);   
sample.openCamera();

只是使用

Intent intent = new Intent(this, SampleClass .class); 

并编写SampleClass onCreate调用openCamera()。

希望这会有所帮助。

是不可能的。 将在该活动上调用onActivityResuly,该活动已经运行了另一个活动。

因此,如果您使用activity1实例运行另一个活动,则另一个活动将调用activity1.onActivityResult()

问题是您使用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中处理图像,请按照以下代码删除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 OS。

我希望您能理解并希望对您有所帮助

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM