Android摄像头不工作-改为启动gallery
我正试图通过一个意图启动Android camaera,拍了一张照片,并返回了URI。应该很简单吧,毕竟有很多关于如何做到这一点的帖子 然而,我使用的是带有ICS的galaxy S3,我发现当我调用相机意图时,它会把我带到画廊,而不是相机 这是我尝试过的代码 首先是一个简单的问题:Android摄像头不工作-改为启动gallery,android,android-intent,camera,Android,Android Intent,Camera,我正试图通过一个意图启动Android camaera,拍了一张照片,并返回了URI。应该很简单吧,毕竟有很多关于如何做到这一点的帖子 然而,我使用的是带有ICS的galaxy S3,我发现当我调用相机意图时,它会把我带到画廊,而不是相机 这是我尝试过的代码 首先是一个简单的问题: public static final int REQUEST_CODE_CAMERA = 1337; . . . Intent intent = new Intent(android.provider.Media
public static final int REQUEST_CODE_CAMERA = 1337;
.
.
.
Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(intent, REQUEST_CODE_CAMERA);
这不起作用。SoI从一个侧面尝试了这个例子
我也读过一些人建议使用不同的请求代码,比如1888、1337和2500。我是否可以使用通用的请求代码或基于框架的静态int?或者这些代码是众多危险因素中的一种,因此可以使用任何代码
顺便说一句,我知道S3不能与MediaStore.EXTRA_输出一起工作的错误。这不是我需要的帮助。我已经知道如何克服这个障碍
[编辑]
**请注意
对于那些阅读此方向的人来说,这可能是一个严重的问题,在使用相机时需要注意。尽管启动摄像头的活动在清单中锁定了其方向。当设备处于纵向模式时,它会在OnActivityResult之前和之后调用OnCreate;因此类全局变量被删除。解决方案是通过*onSaveInstanceStat*e方法保存所有类全局变量,并在OnCreate中使用这些变量在视图中重新加载和显示图像。从收集到的信息来看,并非所有设备都能做到这一点,但每个设备的信息往往是一致的。我的猜测是,活动的内存管理取决于可用的硬件和Android平台。我真希望情况不是这样,但Android就是Android。
[/EDIT]对于使用相机,我使用以下意图:
Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");
对于使用相机,我使用以下意图:
Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");
MainActivity.java
public class MainActivity extends Activity {
private static final int CAMERA_REQUEST = 1888;
private ImageView imageView;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
this.imageView = (ImageView)this.findViewById(R.id.imageView1);
Button photoButton = (Button) this.findViewById(R.id.button1);
photoButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(cameraIntent, CAMERA_REQUEST);
File imagesFolder = new File(Environment.getExternalStorageDirectory(), "MyCameraImages");
imagesFolder.mkdirs();
File image = new File(imagesFolder, "image.jpg");
Uri uriSavedImage = Uri.fromFile(image);
cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, uriSavedImage);
}
});
}
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);
}
}
}
activity_main.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity" >
<ImageView
android:id="@+id/imageView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:layout_marginBottom="79dp" />
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:layout_marginBottom="26dp"
android:text="StartCamera" />
</RelativeLayout>
保存在Gallery中的图像快照
MainActivity.java
public class MainActivity extends Activity {
private static final int CAMERA_REQUEST = 1888;
private ImageView imageView;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
this.imageView = (ImageView)this.findViewById(R.id.imageView1);
Button photoButton = (Button) this.findViewById(R.id.button1);
photoButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(cameraIntent, CAMERA_REQUEST);
File imagesFolder = new File(Environment.getExternalStorageDirectory(), "MyCameraImages");
imagesFolder.mkdirs();
File image = new File(imagesFolder, "image.jpg");
Uri uriSavedImage = Uri.fromFile(image);
cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, uriSavedImage);
}
});
}
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);
}
}
}
activity_main.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity" >
<ImageView
android:id="@+id/imageView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:layout_marginBottom="79dp" />
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:layout_marginBottom="26dp"
android:text="StartCamera" />
</RelativeLayout>
保存在Gallery中的图像快照
android.media.action.IMAGE\u捕获 及 android.provider.MediaStore.ACTION\u图像\u捕获 是一回事。变量android.provider.MediaStore.ACTION\u IMAGE\u CAPTURE 引用上面的字符串。引用变量而不是字符串的原因是为了确保字符串没有变化。如果字符串发生变化,android人员也应更改常量,您应该能够知道您引用的常量错误,但对于字符串,编译时不会出现错误。
我希望它能被清除。android.media.action.IMAGE\u CAPTURE 及 android.provider.MediaStore.ACTION\u图像\u捕获 是一回事。变量android.provider.MediaStore.ACTION\u IMAGE\u CAPTURE 引用上面的字符串。引用变量而不是字符串的原因是为了确保字符串没有变化。如果字符串发生变化,android人员也应更改常量,您应该能够知道您引用的常量错误,但对于字符串,编译时不会出现错误。
我希望它能被清除。从图库中选择照片并拍摄新照片的代码在SDK 24或更高版本中也受支持 活动 显示
在res/xml目录中创建新的文件提供程序_paths.xml
注意-需要应用程序存储访问权限从图库中选择照片并拍摄新照片的代码在SDK 24或更高版本中也受支持 活动 显示
在res/xml目录中创建新的文件提供程序_paths.xml
注意-需要应用程序存储访问权限我有一个s3我使用MediaStore.EXTRA\u输出,我没有遇到任何问题您可能没有ICS,并且已经更新。无论如何,让我们不要偏离我原来的问题,这不是这个。我的手机上有果冻豆。“请求代码”是由你决定的。它的值在Activity#onActivityResult(..)中传递回您的应用程序。它用于区分哪个活动将结果传递回你的应用程序。我有一个s3我使用MediaStore.EXTRA_输出,我没有遇到任何问题。你可能没有ICS,并且已经更新。无论如何,让我们不要偏离我原来的问题,这不是这个。我的手机上有果冻豆。“请求代码”是由你决定的。它的值在Activity#onActivityResult(..)中传递回您的应用程序。它用于区分哪个活动正在将结果传递回应用程序。有趣的是,它可以工作。所以这就引出了一个问题,为什么使用Intent Intent=newintent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE)会有这么多建议;??显然他们是错误的?或者有没有时间使用这个,什么时候使用你的建议?它在Nexus S和华硕Transformer平板电脑上进行了测试。还没有在S3上试过。@AndrewS我只是在手机上测试了一下,通过在gallery中查看拍摄的图像来检查答案和快照。这可以工作并允许相机显示。这就引出了一个问题:为什么有两种方法可以调用摄像头?它们有什么区别?@AndrewS我遵循了文档,代码对我来说很好。所以我建议你忘了其他选择,按照文档去做。有趣的是,它很有效。所以这就引出了一个问题,为什么使用Intent Intent=newintent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE)会有这么多建议;??显然他们是错误的?或者有没有时间使用这个,什么时候使用你的建议?它在Nexus S和华硕Transformer平板电脑上进行了测试。还没有在S3上试过。@AndrewS我刚在手机上测试过,检查ans
<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
<external-path name="my_images"
path="Android/data/your_package_name/files/Pictures" />
</paths>