Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android摄像头不工作-改为启动gallery_Android_Android Intent_Camera - Fatal编程技术网

Android摄像头不工作-改为启动gallery

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

我正试图通过一个意图启动Android camaera,拍了一张照片,并返回了URI。应该很简单吧,毕竟有很多关于如何做到这一点的帖子

然而,我使用的是带有ICS的galaxy S3,我发现当我调用相机意图时,它会把我带到画廊,而不是相机

这是我尝试过的代码

首先是一个简单的问题:

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>