繁体   English   中英

如何为所有 android 设备创建通用的相机动作

[英]how to create a camera action common for all android devices

在我的应用程序中,我想使用相机捕获图像并发送到服务器。

当用户打开我的应用程序的相机部分时,我想向他展示他正在使用的设备的默认相机。 目前以下是我用来捕获图像的两行代码

Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
 startActivityForResult(intent, TAKE_RECEIPT);

当我在 HTC 设备中运行此代码时,在捕获图像后,它会显示带有完成和重拍按钮的图像预览。 当我单击完成时,它会移动到上一个活动。

当我在 moto 设备中使用代码时,在捕获图像后,它会显示带有插入、重拍和取消的图像预览。 当我单击完成时,它会移动到上一个活动。

像这样,所有设备都会有所不同。 因此,当我单击任何设备的完成或插入或任何其他按钮正面按钮时,我想开始上传过程。

如何进行此操作,请帮助我....

您可以使用以下代码来解决您的问题...

protected void startCameraActivity() 

{

    // TODO Auto-generated method stub
        Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE );
        intent.putExtra( MediaStore.EXTRA_OUTPUT, outputFileUri );

        startActivityForResult( intent, 0 );
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) 
    {   
        switch( resultCode )
        {
            case 0:
                break;

            case -1:
                onPhotoTaken();
                break;
        }
    }

    protected void onPhotoTaken()
    {

        ///write code here what you want to done after capture the image using device camera
    }

    @Override 
    protected void onRestoreInstanceState( Bundle savedInstanceState)
    {
        if( savedInstanceState.getBoolean( add_project1.PHOTO_TAKEN ) ) 
        {
            onPhotoTaken();
        }
    }

    @Override
    protected void onSaveInstanceState( Bundle outState ) 
    {
        outState.putBoolean( add_project1.PHOTO_TAKEN, _taken );
    }

实际上,当我们在 Google nexus 1 设备上运行此代码时,问题就出现了,因为它捕获了图像,然后当我们单击完成按钮时,出现异常......这是 Uri SelectedImage = data.getData(); 中的 null 指针;

我不确定问题是否只是关于如何在捕获后上传图像.. 但如果只是这样,我会在您从捕获意图返回到您的活动后为您提供处理它的解决方案。

您可以在启动捕获意图时指定保存图像的路径:

Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
File file = new File(Environment.getExternalStorageDirectory(), "image.jpg");
outputFileUri = Uri.fromFile(file);
intent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri);
startActivityForResult(intent, TAKE_RECEIPT);

然后,您可以在 onActivityResult 中处理上传:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {

    if (requestCode == TAKE_RECEIPT) {
        if (resultCode == Activity.RESULT_OK) {             
                // user took a picture, upload it
                // outputFileUri contains the uri to your file
                // you should delete it when the upload completes

        } else if (resultCode == Activity.RESULT_CANCELED) {
                //user canceled - do nothing
        }
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM