我有一个ScanActivity,我从中实例化一个类(预览),它点击图像并在Camera对象上设置回调。如果回调操作成功,我想返回ScanActivity。例如:
class Preview extends SurfaceView implements SurfaceHolder.Callback{
Camera mCamera;
Preview(){} //constructor to initialize mCamera
public void start(){
mCamera.startPreview();
mCamera.setPreviewCallback(new Camera.PreviewCallback() {
public void onPreviewFrame(byte[] data, Camera camera) {
/*
if(scanSuccessful){
return to activity
}
*/
}
}
}
class ScanActivity extends Activity{
public void onCreate(){
Preview p = new Preview();
preview.start();
}
}
在回调中,我希望在扫描成功的情况下返回到调用活动(ScanActivity)。我知道广播接收器是实现它的一种方式,还有其他方法吗?使用它们的利弊是什么?
答案 0 :(得分:0)
很少有想法,不一定是完整列表 - 您可能想要:
关于利弊的问题,这是非常主观的,AFAIK反对SO rules :) 但是,我认为第4点作为Android SDK的新增功能是一种方法。我还建议反对第3点 - 据我所知,这将在UI线程上运行,并且在繁重工作的情况下 - 可能会导致应用程序无响应。
答案 1 :(得分:0)
brainovergrow 是正确的。您需要setResult方法,以便将结果发送到父活动。我认为Parcelable也会对send data between activities机制提供帮助。
代码:
public interface PreviewCallback {
void onPreviewFrame(byte[] data, Camera camera);
}
class Preview extends SurfaceView implements SurfaceHolder.Callback{
Camera mCamera;
PreviewCallback listener;
Preview(){} //constructor to initialize mCamera
public void setCallback(PreviewCallback callback) {
listener = callback;
}
public void start(){
mCamera.startPreview();
mCamera.setPreviewCallback(new Camera.PreviewCallback() {
public void onPreviewFrame(byte[] data, Camera camera) {
listener.onPreviewFrame(data,camera);
}
}
}
class ScanActivity extends Activity implements PreviewCallback {
public void onCreate(){
Preview p = new Preview();
preview.setCallback(this);
preview.start();
}
@Override
public void onPreviewFrame(byte[] data, Camera camera) {
// do your work
}
}