Android 从java类启动Camera Intent

Android 从java类启动Camera Intent,android,android-intent,android-activity,onclicklistener,android-camera-intent,Android,Android Intent,Android Activity,Onclicklistener,Android Camera Intent,我正在尝试开发一个应用程序,其中的布局是动态创建的。 在我的布局中,我正在创建一个UploadImage按钮 我正在另一个java类中创建OnClickListener,该类实现了OnClickListener类,以便在我的应用程序中的不同位置使用它 但是,不幸的是,我无法启动相机活动 下面是我的应用程序的源代码 MainActivity.java activity_main.xml 从这个GenerateViewsjava类中,我调用了UploadImage类,它实际上实现了OnClickLi

我正在尝试开发一个应用程序,其中的布局是动态创建的。 在我的布局中,我正在创建一个
UploadImage
按钮

我正在另一个java类中创建
OnClickListener
,该类实现了OnClickListener类,以便在我的应用程序中的不同位置使用它

但是,不幸的是,我无法启动相机活动

下面是我的应用程序的源代码

MainActivity.java activity_main.xml 从这个
GenerateViews
java类中,我调用了
UploadImage
类,它实际上实现了OnClickListener

UploadImage.java 一切正常。我的表单是动态创建的,所有文本等都显示为我想要的。 甚至
OnClickListener
也在调用
UploadImage.java
类。 但我得到的错误是:

请尽快帮我解决这个问题。 这很紧急


谢谢

您可以查看此项目。我已经很长时间没有更新了;)但它会满足你的需要

 Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
 File f = new File(android.os.Environment.getExternalStorageDirectory(), "temp.jpg");
 intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(f));
 startActivityForResult(intent, REQUEST_CAMERA);

 @Override
 protected void onActivityResult(int requestCode, int resultCode, Intent data)
 {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK)
{
    if (requestCode == REQUEST_CAMERA)
    {
        File f = new File(Environment.getExternalStorageDirectory().toString());
            for (File temp : f.listFiles())
            {
                if (temp.getName().equals("temp.jpg"))
                {
                    f = temp;
                    break;
                }
            }
            try 
            {
                BitmapFactory.Options btmapOptions = new BitmapFactory.Options();
                bm = BitmapFactory.decodeFile(f.getAbsolutePath(),btmapOptions);
                bm = Bitmap.createScaledBitmap(bm, 70, 70, true);
                ivRecipeImage.setImageBitmap(bm);

                path = android.os.Environment.getExternalStorageDirectory()+ File.separator+ "Phoenix" + File.separator + "default";
                f.delete();
                OutputStream fOut = null;
                File file = new File(path, String.valueOf(System.currentTimeMillis()) + ".jpg");
                try 
                {
                    fOut = new FileOutputStream(file);
                    bm.compress(Bitmap.CompressFormat.JPEG, 85, fOut);
                    fOut.flush();
                    fOut.close();
                }
                catch (FileNotFoundException e) 
                {
                    e.printStackTrace();
                } 
                catch (IOException e) 
                {
                    e.printStackTrace();
                } 
                catch (Exception e)
                {
                    e.printStackTrace();
                }
            } 
            catch (Exception e)
            {
                e.printStackTrace();
            }
        }
        else if (requestCode == PICK_IMAGE) 
        {
            Uri selectedImageUri = data.getData();
            String tempPath = getPath(selectedImageUri, RecipeActivity.this);
            BitmapFactory.Options btmapOptions = new BitmapFactory.Options();
            bm = BitmapFactory.decodeFile(tempPath, btmapOptions);
            ivRecipeImage.setImageBitmap(bm);
        }
    }
}
步骤

1.在android中创建一个新项目,右键单击该项目并选择android,现在单击底部的添加,将“Library”项目添加到您的项目中

2.将这些权限放在清单文件中

<uses-features android:name="android.hardware.camera"/>
<uses-permission android:name="android.permission.CAMERA"/> 
  • 单击按钮事件或在任何活动调用中,用于启动相机

    Intent Intent=新Intent(这是CameraLibrary.class); startActivityForResult(意图、请求代码)

  • 调用
    options.getBitmapFile()
    方法在用户拍照时获取位图图像,或使用
    options.getFilePath()
    方法获取文件路径

  • 创建的映像存储在应用程序的缓存目录中

    编辑

    像这样更改代码

    public class UploadImage extends Activity implements OnClickListener {
    
    private static final int CAMERA_REQUEST = 1888;
    private ImageView imageView;
    private CameraOptions options;
    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
        options = CameraOptions.getInstance(UploadImage.this);
        options.takePicture();
        options.setRequesCode(CAMERA_REQUEST);
        Intent intent = new Intent(UploadImage.this,CameraLibrary.class); 
        startActivityForResult(intent, CAMERA_REQUEST);
    }
    
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (requestCode == CAMERA_REQUEST && resultCode == RESULT_OK) {
            imageView.setImageBitmap(options.getBitmapFile());
        }
    }
    }
    

    上传图像中的第20行是哪一行?我想您在设置位图之前没有初始化
    imageview
    。)@Chintan Rathod实际上这部分我以后会处理…但最初,startActivityForResult没有启动…这意味着我的应用程序无法打开
    相机意图
    …首先相机必须打开,然后我会处理保存图像或其他任何事情。您没有将onClick()设置为任何按钮。Try button.setOnClickListener(这个)@阿披实那么这条线是干什么的<代码>按钮上载ImageButton=新按钮(上下文);uploadImageButton.setText(R.string.uploadImage);setOnClickListener(新的UploadImage())请将此问题向上投票,以便更多的人可以看到和回答我..请..这真的很紧急,…我在过去三天中一直被困在这一问题中使用此代码,并在其中添加“写入外部存储”权限。实际上,相机的意图最初并没有启动。如果无法捕获图像,我将如何保存该图像。。onActivityResult()是稍后的任务。首先,我要初始化未开始使用StartActivityResult()的相机。请向上投票,这样更多的人可以回答。你必须获取拍摄照片的文件路径,然后将其转换为位图或bytearry,然后你可以保存它,但问题是……我只从java类调用相机。这不是一个活动如果它是一个活动,就不会有问题。但是由于它是一个java类…我无法使用
    startActivityForResult
    请更新这个问题,先生…我需要更多人给出一个好的答案..请在
    UploadImage类中使用
    startActivityForResult
    ?。你能确切地指定什么类在调用什么类吗?因为你说你的调用摄影机来自一个java类,我也投了赞成票。另外,请检查我在回答中的编辑我应该在哪里实例化CameraOptions类?请检查上面的代码..我已经清楚地说了一切…但是对于你…我会再次解释我现在从
    GenerateViews
    java类调用
    UploadInage
    ,如果我在
    UploadImage
    中输入
    startActivityForResult
    ,我将得到错误。我认为摄像机的意图只能从一个活动开始,对吗??
    import android.app.Activity;
    import android.content.Intent;
    import android.graphics.Bitmap;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.ImageView;
    
    public class UploadImage extends Activity implements OnClickListener {
    
    private static final int CAMERA_REQUEST = 1888;
    private ImageView imageView;
    
    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
        Intent cameraIntent = new Intent(
                android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
        startActivityForResult(cameraIntent, CAMERA_REQUEST);
    }
    
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (requestCode == CAMERA_REQUEST && resultCode == RESULT_OK) {
            Bitmap photo = (Bitmap) data.getExtras().get("data");
            imageView.setImageBitmap(photo);
        }
    }
    }
    
     Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
     File f = new File(android.os.Environment.getExternalStorageDirectory(), "temp.jpg");
     intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(f));
     startActivityForResult(intent, REQUEST_CAMERA);
    
     @Override
     protected void onActivityResult(int requestCode, int resultCode, Intent data)
     {
    super.onActivityResult(requestCode, resultCode, data);
    if (resultCode == RESULT_OK)
    {
        if (requestCode == REQUEST_CAMERA)
        {
            File f = new File(Environment.getExternalStorageDirectory().toString());
                for (File temp : f.listFiles())
                {
                    if (temp.getName().equals("temp.jpg"))
                    {
                        f = temp;
                        break;
                    }
                }
                try 
                {
                    BitmapFactory.Options btmapOptions = new BitmapFactory.Options();
                    bm = BitmapFactory.decodeFile(f.getAbsolutePath(),btmapOptions);
                    bm = Bitmap.createScaledBitmap(bm, 70, 70, true);
                    ivRecipeImage.setImageBitmap(bm);
    
                    path = android.os.Environment.getExternalStorageDirectory()+ File.separator+ "Phoenix" + File.separator + "default";
                    f.delete();
                    OutputStream fOut = null;
                    File file = new File(path, String.valueOf(System.currentTimeMillis()) + ".jpg");
                    try 
                    {
                        fOut = new FileOutputStream(file);
                        bm.compress(Bitmap.CompressFormat.JPEG, 85, fOut);
                        fOut.flush();
                        fOut.close();
                    }
                    catch (FileNotFoundException e) 
                    {
                        e.printStackTrace();
                    } 
                    catch (IOException e) 
                    {
                        e.printStackTrace();
                    } 
                    catch (Exception e)
                    {
                        e.printStackTrace();
                    }
                } 
                catch (Exception e)
                {
                    e.printStackTrace();
                }
            }
            else if (requestCode == PICK_IMAGE) 
            {
                Uri selectedImageUri = data.getData();
                String tempPath = getPath(selectedImageUri, RecipeActivity.this);
                BitmapFactory.Options btmapOptions = new BitmapFactory.Options();
                bm = BitmapFactory.decodeFile(tempPath, btmapOptions);
                ivRecipeImage.setImageBitmap(bm);
            }
        }
    }
    
    <uses-features android:name="android.hardware.camera"/>
    <uses-permission android:name="android.permission.CAMERA"/> 
    
    <activity android:name="com.camera.library.CameraLibrary"></activity>
    
     CameraOptions options = CameraOptions.getInstance(this);
     options.takePicture();
    
    public class UploadImage extends Activity implements OnClickListener {
    
    private static final int CAMERA_REQUEST = 1888;
    private ImageView imageView;
    private CameraOptions options;
    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
        options = CameraOptions.getInstance(UploadImage.this);
        options.takePicture();
        options.setRequesCode(CAMERA_REQUEST);
        Intent intent = new Intent(UploadImage.this,CameraLibrary.class); 
        startActivityForResult(intent, CAMERA_REQUEST);
    }
    
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (requestCode == CAMERA_REQUEST && resultCode == RESULT_OK) {
            imageView.setImageBitmap(options.getBitmapFile());
        }
    }
    }