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"/>
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());
}
}
}