[英]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.