在android中,如何将回调从类发送到活动?

在android中,如何将回调从类发送到活动?,android,android-intent,android-activity,Android,Android Intent,Android Activity,我有一个ScanActivity,我从中实例化了一个类(预览),该类单击图像并在Camera对象上设置回调。如果回调操作成功,我想返回ScanActivity。例: class Preview extends SurfaceView implements SurfaceHolder.Callback{ Camera mCamera; Preview(){} //constructor to initialize mCamera public void start(){

我有一个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)。我知道广播接收机是实现它的一种方法,还有其他方法吗?使用它们的优点和缺点是什么?

一些想法,不一定是完整的列表-您可能希望:

  • 将工作委派给服务部门,如果这很耗时的话
  • 使用侦听器接口-
  • 使用Android的
  • 关于正反两方面的问题,这是一个非常主观的问题,对此表示反对:)
    然而,我认为第4点作为Android SDK的新补充是一条路要走。我也反对第3点——据我所知,这将在UI线程上运行,并且在繁重的工作情况下——可能会导致应用程序无响应。

    是正确的。您需要一个允许将结果发送到父活动的方法。我认为你将有助于一个机制也

    代码:

    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
        }
    }
    

    我不想在活动之间传递数据,我知道如何实现这一点。我想把控制权从一个普通类传递给一个活动。我编辑了这个问题,以便更好地解释它。