代码之家  ›  专栏  ›  技术社区  ›  Hamza

android中打开摄像头的问题

  •  0
  • Hamza  · 技术社区  · 7 年前

    它在android 6.0之前工作正常。

    错误

    private void takePhotoFromCamera()
    {
        AnimateImageButton();
        boolean result = Utility.checkPermission(MainActivity.this);
        if (result) {
            try {
                _isOpenGallery = false;
    
                Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");
                timeStamp = new SimpleDateFormat("ddMMyyyy_HHmm").format(new Date());
                File file = new File(Environment.getExternalStorageDirectory() + File.separator + timeStamp + "image.jpg");
                intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(file));
                startActivityForResult(intent, REQUEST_CAMERA);
                System.out.println("Hello >>>>>>>> : " + file.getAbsolutePath());
            }catch (Exception e)
            {
    
                Log.d("logforcamera",e.getMessage());
            }
        }
    }
    

    活动结果代码

    ByteArrayOutputStream bytes = new ByteArrayOutputStream();
        File file = new File(Environment.getExternalStorageDirectory() + File.separator + timeStamp + "image.jpg");
        System.out.println("Helllloooo >>>>>>>>>>> : " + file.getAbsolutePath());
        Bitmap bitmap = decodeSampledBitmapFromFile(file.getAbsolutePath(), widthX, heightY);
        System.out.println("Bitmap : " + bitmap);
        if (bitmap != null)
        {
            bitmap.compress(Bitmap.CompressFormat.JPEG, 90, bytes);
            showSelectedImage(bitmap);
        }
    
    3 回复  |  直到 7 年前
        1
  •  2
  •   user8562054 user8562054    7 年前

    试试看,这并不是在你拍照并保存到sd卡后产生问题的意图,取回uri在牛轧糖中是不同的。。。。

    在应用程序上实现FileProvider非常容易。首先,您需要在AndroidManifest中添加一个FileProvider标记。标记下的xml如下:AndroidManifest.xml

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        ...
        <application
            ...
            <provider
                android:name="android.support.v4.content.FileProvider"
                android:authorities="${applicationId}.provider"
                android:exported="false"
                android:grantUriPermissions="true">
                <meta-data
                    android:name="android.support.FILE_PROVIDER_PATHS"
                    android:resource="@xml/provider_paths"/>
            </provider>
        </application>
    </manifest>
    

    然后创建provider_路径。res文件夹下的xml文件夹中的xml文件。如果文件夹不存在,则可能需要创建该文件夹。

    res/xml/provider\u paths.xml

    <?xml version="1.0" encoding="utf-8"?>
    <paths xmlns:android="http://schemas.android.com/apk/res/android">
        <external-path name="external_files" path="."/>
    </paths>
    

    最后一步是更改MainActivity.java中下面的代码行

    Uri photoURI = Uri.fromFile(createImageFile());
    

    ri photoURI = FileProvider.getUriForFile(MainActivity.this,
                BuildConfig.APPLICATION_ID + ".provider",
                createImageFile());
    

    然后……完成!您的应用程序现在应该可以在任何Android版本(包括Android Nougat)上正常运行。干杯

        2
  •  1
  •   Diwan Dhanvani    7 年前

    要在targetSdkVersion 24或更高版本中打开摄像头,我们必须使用FileProvider类来访问文件。

    Open Camera in Nougut

        3
  •  -1
  •   PCGALI ANDROID Shailendra Madda    7 年前

    package edu.gvsu.cis.masl.camerademo;
    import android.app.Activity;
    import android.content.Intent;
    import android.graphics.Bitmap;
    import android.os.Bundle; 
    import android.view.View;
    import android.widget.Button;
    import android.widget.ImageView;
    
    public class MyCameraActivity extends Activity {
      private static final int CAMERA_REQUEST = 1888; 
      private ImageView imageView;
    
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.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); 
            }
        });
    }
    
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {  
        if (requestCode == CAMERA_REQUEST && resultCode == Activity.RESULT_OK) {  
            Bitmap photo = (Bitmap) data.getExtras().get("data"); 
            imageView.setImageBitmap(photo);
        }  
    } 
    

    }