将图像从摄像头捕获移动到android中的其他活动的问题

时间:2011-04-08 12:07:15

标签: android android-activity camera android-intent

在我的应用程序中,我想捕获图像,我希望它在另一个活动中查看。 我的相机编码只能在SD卡中捕获和存储图像时正常工作,当我添加一些额外的代码将捕获的图像从一个活动移动到另一个活动时,相机无法正常工作。

在logcat中

显示以下错误 04-08 17:28:43.771:ERROR / AndroidRuntime(8717):java.lang.RuntimeException:无法启动活动ComponentInfo {com.resting.gis / com.resting.gis.Camera}:android.content.ActivityNotFoundException:Unable找到明确的活动类{com.resting.gis / View};你有没有在AndroidManifest.xml中声明这个活动?

但清单文件中提到了View活动

以下是我捕获图像的代码

protected static final int TAKE_RECEIPT = 0;
    private Uri imageCaptureUri;
    private String filename;
    private Runnable submitReceiptRunnable = new Runnable() 
    {
        public void run() 
        {
            publishReceipt();
        }

        private void publishReceipt() 
        {

        }
    };

    private ProgressDialog progressDialog;
    OutputStream outStream;

    Intent myIntent;

    @Override
    public void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.camera);

        takePictureFromCamera();
    }
            private void takePictureFromCamera() 
            {
                 Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

                    imageCaptureUri = Uri.fromFile(new File(Environment.getExternalStorageDirectory(), "tmp_receipt_"
                            + String.valueOf(System.currentTimeMillis()) + ".jpg"));

                    intent.putExtra(android.provider.MediaStore.EXTRA_OUTPUT, imageCaptureUri);
                    intent.putExtra("return-data", true); 

                    startActivityForResult(intent, TAKE_RECEIPT);

                    String path =  String.format("/sdcard/%d.jpg",System.currentTimeMillis());
                    try 
                    {
                        outStream = new FileOutputStream(path);
                        doFileUpload(path);
                        Log.e("Camera",""+outStream);
                    }
                    catch (FileNotFoundException e) 
                    {
                        e.printStackTrace();
                    }

                    Intent i=new Intent();
                    i.setClassName("com.resting.gis","View");
                    i.putExtra("image", path);
                    startActivity(i);

            }

            private void takeReceiptCallback(int resultCode, Intent data)
            {
                if (resultCode == Activity.RESULT_OK) 
                {
                    submitReceipt();
                }
            }

            private void submitReceipt() 
            {
                Thread thread = new Thread(null, submitReceiptRunnable);
                thread.start();
//              progressDialog = ProgressDialog.show(this, "Please wait...", "Publishing receipt ...", true);               
            }

            private String getBase64Receipt() {
                try {
                    InputStream inputStream = getContentResolver().openInputStream(imageCaptureUri);
//                  byte[] bytes = CommonUtil.getBytesFromInputStream(inputStream);
//                  return Base64.encodeBytes(bytes);//(selectedImage.getPath().getBytes());     
                }
                catch (IOException e) 
                {
                    Log.e("getbase64Reciept", ""+e);
                }

                return null;
            }

            private void publishReceipt() 
            {
                String receipt = getBase64Receipt();
            }

请帮我找到我错的地方

1 个答案:

答案 0 :(得分:1)

您可能尚未在AndroidManifest.xml中声明第二个活动。 必须在那里宣布所有活动才能进入。

如果你已经这样做了,那么我建议尝试以不同的,不那么成问题的方式创建意图。

new Intent(this, com.resting.gis.View.class);

第一个参数是要使用的上下文。第二个是要启动的Activity类。当它在您的应用程序内部时,这是启动活动的最简单且最不容易出错的方式。我假设com.resting.gis.View是你的第二个活动类的名称。

http://developer.android.com/guide/topics/manifest/manifest-intro.html