1

我在我的 android 应用程序中创建了 2 个线程,但它们不起作用:(。

final Thread t1 = new Thread() {
                // @Override
                public void run() {
                    camera.takePicture(null, null, photoCallback);
                    Log.e("mediafile", mediaFile+"");
                }
            };
            t1.start();

            final Thread t2 = new Thread() {
                // @Override
                public void run() {
                    Intent myIntent = new Intent(CameraActivity.this, ModificationActivity.class);
                    Log.e("le chemin de la photo", "" + mediaFile);
                    myIntent.putExtra("imagePath", ""+mediaFile);
                    startActivity(myIntent);
                }
            };
            try {
                t1.join();
                t2.start();
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

当我开始我的意图时,我的变量始终为 null,因为第一个线程尚未完成。

我希望你能帮助我:D

在此先感谢大家

这是日志:

11-05 14:29:59.936 18216-18216/com.mcm.citadium I/Choreographer﹕跳过了 72 帧!应用程序可能在其主线程上做了太多工作。11-05 14:30:05.140 18216-18387/com.mcm.citadium E/mediafile﹕null 11-05 14:30:05.148 18216-18389/com.mcm.citadium E/le chemin de la photo﹕null 11- 05 14:30:05.652 18216-18216/com.mcm.citadium E/fin de photoCallback:/storage/sdcard0/Pictures/MyCameraApp/IMG_20131105_143005.jpg

4

3 回答 3

0

好吧,首先你不需要创建任何线程来捕获图像——你可以camera.takePicture安全地在主线程上运行——它无论如何都会在另一个线程中处理它的工作(参见文档)。

因此,例如,您可以在按钮处理程序中触发拍照活动onClick

        shootButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                    mCamera.takePicture(null, null, photoCallback);
            }
        });

然后你photoCallback会看起来像:

    Camera.PictureCallback photoCallback = new Camera.PictureCallback() {
        public void onPictureTaken(byte[] data, Camera camera) {
            // generate file path for new picture
            String fileName = "myPicture.jpg";
            String mediafile = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM)
               .getCanonicalPath() + "/mydir/" + fileName;

            // launching new activity to modify picture
            Intent myIntent = new Intent(CameraActivity.this,
                ModificationActivity.class);
            Log.e("le chemin de la photo", "" + mediaFile);
            myIntent.putExtra("imagePath", ""+mediaFile);
            startActivity(myIntent);
        }
    };
于 2013-11-05T23:06:06.843 回答
0

为什么 t2 在 try-catch 中开始?我认为,如果您只是将两个开始都放在 try-catch 之外,然后将两个线程加入其中,这应该可以工作。

t1.start();
t2.start();

try {
    t1.join();
    t2.join();
}
catch (Exception e) { e.printStackTrace(); }
于 2013-11-05T22:35:08.023 回答