Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
有没有一种方法可以直接从另一个类调用一个类函数,而不用Java中的实例?_Java_Android - Fatal编程技术网

有没有一种方法可以直接从另一个类调用一个类函数,而不用Java中的实例?

有没有一种方法可以直接从另一个类调用一个类函数,而不用Java中的实例?,java,android,Java,Android,我有一个应用程序,我有一张照片,然后它应该发送数据从图片到另一个活动使用的意图 我试图在jpegCallback中调用intent,但问题是在调用intent之前,我还需要通过preview类释放相机。但是,我无法从回调内部访问原始预览对象,因此我需要一种从回调内部调用MainActivity.doPictureResults()的方法。或者我需要一种方法,让侦听器在所有图片回调完成后启动 这是我的MainActivity类,它在mPreview变量中保存了Preview类的一个实例。jpegC

我有一个应用程序,我有一张照片,然后它应该发送数据从图片到另一个活动使用的意图

我试图在
jpegCallback
中调用intent,但问题是在调用intent之前,我还需要通过preview类释放相机。但是,我无法从回调内部访问原始预览对象,因此我需要一种从回调内部调用
MainActivity.doPictureResults()
的方法。或者我需要一种方法,让侦听器在所有图片回调完成后启动

这是我的
MainActivity
类,它在
mPreview
变量中保存了
Preview
类的一个实例。
jpegCallback
位于底部,我想从内部调用
dopicturesults
,或者在该函数完成后设置另一个回调

public class MainActivity extends Activity {

    private final String TAG = "MainActivity";
    private Preview mPreview;
    Camera mCamera;
    int numberOfCameras;
    int cameraCurrentlyLocked;

    //The first rear facing camera
    int defaultCameraId;

    /**
     * Constructor
     * @param savedInstanceState 
     */
    @Override
    protected void onCreate(Bundle savedInstanceState) {Log.e(TAG, "onCreate");
        super.onCreate(savedInstanceState);

        //Hide the window title.
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);

        //Create a RelativeLayout container that will hold a SurfaceView,
        //and set it as the content of our activity.
        this.mPreview = new Preview(this);
        setContentView(this.mPreview);

        //Find the total number of cameras available
        this.numberOfCameras = Camera.getNumberOfCameras();

        //Find the ID of the default camera
        CameraInfo cameraInfo = new CameraInfo();
        for(int i = 0; i < this.numberOfCameras; i++) {
            Camera.getCameraInfo(i, cameraInfo);
            if(cameraInfo.facing == CameraInfo.CAMERA_FACING_BACK) {
                this.defaultCameraId = i;
            }
        }
    }

    @Override
    protected void onResume() {Log.e(TAG, "onResume");
        super.onResume();

        //Open the default i.e. the first rear facing camera.
        this.mCamera = Camera.open();
        this.cameraCurrentlyLocked = this.defaultCameraId;
        this.mPreview.setCamera(mCamera);
    }

    @Override
    protected void onPause() {Log.e(TAG, "onPause");
        super.onPause();

        //Because the Camera object is a shared resource, it's very
        //Important to release it when the activity is paused.
        this.mPreview.releaseCamera();
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        //Inflate our menu which can gather user input for switching camera
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.camera_menu, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        //Handle item selection
        switch (item.getItemId()) {
            case R.id.switchCam:
                //Check for availability of multiple cameras
                if(this.numberOfCameras == 1) {
                    AlertDialog.Builder builder = new AlertDialog.Builder(this);
                    builder.setMessage(this.getString(R.string.camera_alert)).setNeutralButton("Close", null);
                    AlertDialog alert = builder.create();
                    alert.show();
                    return true;
                }

                //OK, we have multiple cameras.
                //Release this camera -> cameraCurrentlyLocked
                this.mPreview.releaseCamera();

                //Acquire the next camera and request Preview to reconfigure parameters.
                this.mCamera = Camera.open((this.cameraCurrentlyLocked + 1) % this.numberOfCameras);
                this.cameraCurrentlyLocked = (this.cameraCurrentlyLocked + 1) % this.numberOfCameras;
                this.mPreview.switchCamera(mCamera);

                //Start the preview
                this.mCamera.startPreview();
                return true;

            case R.id.takePicture:
                this.mCamera.takePicture(null, null, jpegCallback);
                return true;

            default:
                return super.onOptionsItemSelected(item);
        }
    }

    public void doPictureResults(byte[] data) {
        this.mPreview.releaseCamera();

        //Release the camera and send the results of the image to the GetResults view
        Intent resultsIntent = new Intent(MainActivity.this, ImageProcessorActivity.class);
        resultsIntent.putExtra("image_data", data);
        startActivity(resultsIntent);
    }

    /**
     * Handles data for jpeg picture when the picture is taken
     */
    PictureCallback jpegCallback = new PictureCallback() { 
        public void onPictureTaken(byte[] data, Camera mCamera) {Log.e(TAG, "jpegCallback");
            String baseExternalDir = Environment.getExternalStorageDirectory().getAbsolutePath();
            String fileName = String.format("Assist/%d.jpg", System.currentTimeMillis());

            FileOutputStream outStream = null;
            try {
                //Create the directory if needed
                File assistDirectory = new File(baseExternalDir + File.separator + "Assist");
                assistDirectory.mkdirs();

                // Write to SD Card
                outStream = new FileOutputStream(baseExternalDir + File.separator + fileName);
                outStream.write(data);
                outStream.close();
            } 
            catch (FileNotFoundException e) { 
                Log.e(TAG, "IOException caused by PictureCallback()", e);
            } 
            catch (IOException e) {
                Log.e(TAG, "IOException caused by PictureCallback()", e);
            } 

            //This is the type of thing I WANT to do....but its not possible.
            MainActivity.doPictureResults();
        }
    };
}
公共类MainActivity扩展活动{
私有最终字符串TAG=“MainActivity”;
私人审查;
麦克默拉照相机;
国际数码相机;
int CameracCurrentlyLocked;
//第一个后向摄像头
int-defaultCameraId;
/**
*建造师
*@param savedInstanceState
*/
@凌驾
受保护的void onCreate(Bundle savedInstanceState){Log.e(标记“onCreate”);
super.onCreate(savedInstanceState);
//隐藏窗口标题。
requestWindowFeature(窗口。功能\u无\u标题);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_全屏);
//创建一个RelativeLayout容器,用于保存SurfaceView,
//并将其作为我们活动的内容。
this.mPreview=新预览(this);
setContentView(this.mPreview);
//查找可用相机的总数
this.numberOfCameras=Camera.getNumberOfCameras();
//查找默认摄影机的ID
camerRainfo camerRainfo=新的camerRainfo();
对于(int i=0;i相机当前锁定
此.mPreview.releaseCamera();
//获取下一个摄像头并请求预览以重新配置参数。
this.mCamera=Camera.open((this.cameraccurrentlyclocked+1)%this.numberofcamera);
this.cameraCurrentlyLocked=(this.cameraCurrentlyLocked+1)%this.numberOfCameras;
这个.mPreview.switchCamera(mCamera);
//开始预览
this.mCamera.startPreview();
返回true;
案例R.id.拍摄照片:
this.mCamera.takePicture(null,null,jpegCallback);
返回true;
违约:
返回super.onOptionsItemSelected(项目);
}
}
public void doPictureResults(字节[]数据){
此.mPreview.releaseCamera();
//释放相机并将图像结果发送到GetResults视图
Intent resultsIntent=新的Intent(MainActivity.this、ImageProcessorActivity.class);
结果内容putExtra(“图像数据”,数据);
起始触感(结果含量);
}
/**
*拍摄图片时处理jpeg图片的数据
*/
PictureCallback jpegCallback=新建PictureCallback(){
public void onPictureTaken(字节[]数据,Camera mCamera){Log.e(标记,“jpegCallback”);
字符串baseExternalDir=Environment.getExternalStorageDirectory().getAbsolutePath();
String fileName=String.format(“Assist/%d.jpg”,System.currentTimeMillis());
FileOutputStream扩展流=null;
试一试{
//如果需要,创建目录
File assistDirectory=新文件(baseExternalDir+File.separator+“Assist”);
assistDirectory.mkdirs();
//写入SD卡
outStream=新文件OutputStream(baseExternalDir+File.separator+文件名);
外扩。写入(数据);
exptream.close();
} 
catch(filenotfound异常){
Log.e(标记“PictureCallback()引起的IOException”,e);
public class MainActivity extends Activity implements PictureCallback {
    ...
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            ....
            case R.id.takePicture:
                this.mCamera.takePicture(null, null, this);
                return true;

            default:
                return super.onOptionsItemSelected(item);
        }
    }
    ...
    public void onPictureTaken(byte[] data, Camera mCamera) {
        Log.d(TAG, "jpegCallback");
        String baseExternalDir = Environment.getExternalStorageDirectory().getAbsolutePath();
        String fileName = String.format("%d.jpg", System.currentTimeMillis());
        ...
        doPictureResults();
    }
}