2017-10-28 25 views
1

我只是想写一个代码来捕获一个图像,并将该图像保存在名称为test.jpg的默认目录中。我的设备做捕捉图像,但它运行测试用例的其他部分,并显示错误捕获image.In xml文件,只有一个按钮和android:onClick函数设置为过程为什么从设备捕捉图片的代码无法正常运行?

公共类MainActivity扩展活动{

private File imagefile; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
} 
public void process(View v) 
{ 
    Toast.makeText(this,"Inside the process",Toast.LENGTH_SHORT).show(); 
    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
    imagefile = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES),"test.jpg"); 
    Uri temp = Uri.fromFile(imagefile); 
    intent.putExtra(MediaStore.EXTRA_OUTPUT,temp); 
    intent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY,1); 
    startActivityForResult(intent,0); 


} 

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if(requestCode==0) 
    { 
     switch (resultCode){ 
      case Activity.RESULT_OK: 
       if(imagefile.exists()) 
       { 
        Toast.makeText(this,"File was saved at "+imagefile.getAbsolutePath(),Toast.LENGTH_SHORT).show(); 
       } 
       else 
       { 
        Toast.makeText(this,"Error captureing image",Toast.LENGTH_SHORT).show(); 
       } 
       break; 
      case Activity.RESULT_CANCELED: 
       break; 
     } 
    } 
} 
} 
+0

投你在的onCreate按钮()方法 –

+0

@Yashajabiya我没有,但仍具有相同 –

+0

添加'<使用的许可机器人:名称=“android.permission.CAMERA” />'和用于照相机许可请求。 – KeLiuyue

回答

0

1.使用checkSelfPermission

2.使用requestPermissions

3.使用onRequestPermissionsResult

  • 如果授予权限,你可以做你想要的东西,否则你应该在你的代码做requestPermissions

  • 如果你要求权限,你可以在onRequestPermissionsResult方法中处理结果。如果授予权限,你可以做你想做的事情,否则处理该权限被拒绝。

试试这个。

public static final int MY_PERMISSIONS_REQUEST_CAMERA = 0; 

// process in your code 
public void process(View view) { 
    if (ContextCompat.checkSelfPermission(this, 
      Manifest.permission.CAMERA) 
      != PackageManager.PERMISSION_GRANTED) { 
     ActivityCompat.requestPermissions(this, 
       new String[]{Manifest.permission.CAMERA}, 
       MY_PERMISSIONS_REQUEST_CAMERA); 
    } else { 
     // permission_granted 
     callMethod(); 
    } 
} 

/** 
* do something you want 
*/ 
public void callMethod() { 
    Toast.makeText(this, "Inside the process", Toast.LENGTH_SHORT).show(); 
    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
    imagefile = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), "test.jpg"); 
    Uri temp = Uri.fromFile(imagefile); 
    intent.putExtra(MediaStore.EXTRA_OUTPUT, temp); 
    intent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 1); 
    startActivityForResult(intent, 0); 
} 

/** 
* onRequestPermissionsResult 
* 
* @param requestCode 
* @param permissions 
* @param grantResults 
*/ 
@Override 
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { 
    if (requestCode == MY_PERMISSIONS_REQUEST_CALL_PHONE) { 
     if (grantResults[0] == PackageManager.PERMISSION_GRANTED) { 
      // Permission granted 
      callMethod(); 
     } else { 
      // Permission Denied 
      Toast.makeText(MainActivity.this, "Permission Denied", Toast.LENGTH_SHORT).show(); 
     } 
     return; 
    } 
    super.onRequestPermissionsResult(requestCode, permissions, grantResults); 
} 
+0

许可,谢谢它的工作 –

+0

祝你好运@ adnan_aust – KeLiuyue