android 当拒绝调用摄像头权限时,系统崩溃怎么处理

 我来答
齐天大圣李冠星
2015-01-30 · 写作不是为了改变世界,而是为了安顿自己。
齐天大圣李冠星
采纳数:4691 获赞数:11097

向TA提问 私信TA
展开全部
我参照网上教程编写一个简单的相机软件,然后通过按menu菜单调用系统录像功能,但是每次调用录像功能的时候都会崩溃一下,就是这次调用成功,再点一下就崩溃,继续点调用又成功,再继续调用又崩溃,请问下这是怎么回事呢?
求助啊,毕设的最后一步了,就是在这个上面一直弄不好!!!!!
附上代码:public class TakeActivity extends Activity {
//public static final String MIME_TYPE_IMAGE_JPEG = "image/*";
//public static final int ACTIVITY_GET_IMAGE = 0;

private CameraView cv;
//准备一个相机对象
private Camera mCamera = null;
//准备一个Bitmap对象
//private Camera camera;
private Bitmap mBitmap = null;
//准备一个保存图片的PictureCallback对象
public Camera.PictureCallback pictureCallback = new Camera.PictureCallback() {
public void onPictureTaken(byte[] data, Camera camera) {
Log.i("yao","onPictureTaken");
Toast.makeText(getApplicationContext(), "正在保存……", Toast.LENGTH_LONG).show();
//用BitmapFactory.decodeByteArray()方法可以把相机传回的裸数据转换成Bitmap对象
mBitmap = BitmapFactory.decodeByteArray(data, 0, data.length);
//接下来的工作就是把Bitmap保存成一个存储卡中的文件
File file = new File("/sdcard/YY"+ new DateFormat().format("yyyyMMdd_hhmmss", Calendar.getInstance(Locale.CHINA)) + ".jpg");
try {
file.createNewFile();
BufferedOutputStream os = new BufferedOutputStream(new FileOutputStream(file));
mBitmap.compress(Bitmap.CompressFormat.PNG, 100, os);
os.flush();
os.close();
Toast.makeText(getApplicationContext(), "图片保存完毕,在存储卡的根目录", Toast.LENGTH_LONG).show();
//mCamera.startPreview(); 拍完照一秒预览立刻返回
} catch (IOException e) {
e.printStackTrace();
}
}
};
//Activity的创建方法
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//窗口去掉标题
requestWindowFeature(Window.FEATURE_NO_TITLE);
//窗口设置为全屏
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);
//设置窗口为半透明
getWindow().setFormat(PixelFormat.TRANSLUCENT);
//提供一个帧布局
FrameLayout fl = new FrameLayout(this);
//创建一个照相预览用的SurfaceView子类,并放在帧布局的底层
cv = new CameraView(this);
fl.addView(cv);
//创建一个文本框添加在帧布局中,我们可以看到,文字自动出现在了SurfaceView的前面,由此你可以在预览窗口做出各种特殊效果

//设置Activity的根内容视图
setContentView(fl);
}

private void videoMethod() {
Intent intent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);
intent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 0);
startActivityForResult(intent, REQUEST_CODE_TAKE_VIDEO);
}

public boolean onCreateOptionsMenu(Menu menu) {
menu.add(0,1,1,R.string.picture);
menu.add(0,2,2,R.string.vedio);
menu.add(0,3,3,R.string.about);
menu.add(0,4,4,R.string.exit);
return super.onCreateOptionsMenu(menu);
}

// public static final int PHOTOHRAPH = 1;
// public static final String IMAGE_UNSPECIFIED = "image/*";
// public static final int PHOTOZOOM = 2; // 缩放
// public static final int PHOTORESOULT = 3;// 结果
private static final int REQUEST_CODE_TAKE_VIDEO = 2;// 摄像的照相的requestCode
//private static final int ACTION_TAKE_VIDEO = 0;
// private static final int CASE_VIDEO=3;
// ImageView imageView = null;
public boolean onOptionsItemSelected(MenuItem item) {
if(item.getItemId()==4){
finish();
}
if(item.getItemId()==3){ //评分
Intent intent = new Intent();
intent.setClass(TakeActivity.this,Pingfen.class);
TakeActivity.this.startActivity(intent);
}
if(item.getItemId()==2){ //调用系统录像程序录像
// Intent intent = new Intent();
// intent.setType("");
// intent.
//startActivityForResult(intent, 1);

// mCamera.stopPreview();
// 释放相机资源并置空
// mCamera.release();
// Intent takeVideoIntent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);
// startActivityForResult(takeVideoIntent, ACTION_TAKE_VIDEO);

videoMethod();
//Intent mintent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);
//mintent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 0);
// startActivityForResult(intent, CAMERA_ACTIVITY);

//startActivityForResult(mintent, REQUEST_CODE_TAKE_VIDEO);

// Intent intent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);
// startActivityForResult(intent, CASE_VIDEO);

//Intent intent = new Intent();
//intent.setAction("android.media.action.STILL_IMAGE_CAMERA");
//startActivity(intent);

//Intent intent = new Intent();
/* 开启Pictures画面Type设定为image */
//intent.setType("image/*");
/* 使用Intent.ACTION_GET_CONTENT这个Action */
// intent.setAction(Intent.ACTION_GET_CONTENT);
/* 取得相片后返回本画面 */
// startActivityForResult(intent, 1);
// REQUEST_CAMERA =0;

//Intent intent = new Intent(Intent.ACTION_PICK, null);
// intent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, IMAGE_UNSPECIFIED);
// startActivityForResult(intent, PHOTOZOOM);

}
if(item.getItemId()==1){ //调用系统相册浏览图片
Intent intent = new Intent();
/* 开启Pictures画面Type设定为image */
intent.setType("image/*");
/* 使用Intent.ACTION_GET_CONTENT这个Action */
// intent.setAction(Intent.ACTION_GET_CONTENT);
/* 取得相片后返回本画面 */
startActivityForResult(intent, 1);

}
return super.onOptionsItemSelected(item);
}
// protected void onActivityResult(int requestCode, int resultCode, Intent data) {
/* if (requestCode == PHOTOZOOM) {
startPhotoZoom(data.getData());
} */
// 处理结果
// if (requestCode == PHOTORESOULT) {
// Bundle extras = data.getExtras();
// if (extras != null) {
// Bitmap photo = extras.getParcelable("data");
// ByteArrayOutputStream stream = new ByteArrayOutputStream();
// photo.compress(Bitmap.CompressFormat.JPEG, 75, stream);// (0 - 100)压缩文件
// imageView.setImageBitmap(photo);
// }

// }

// super.onActivityResult(requestCode, resultCode, data);
// }
/* public void startPhotoZoom(Uri uri) {
Intent intent = new Intent("com.android.camera.action.CROP");
intent.setDataAndType(uri, IMAGE_UNSPECIFIED);
intent.putExtra("crop", "true");
// aspectX aspectY 是宽高的比例
intent.putExtra("aspectX", 1);
intent.putExtra("aspectY", 1);
// outputX outputY 是裁剪图片宽高
intent.putExtra("outputX", 64);
intent.putExtra("outputY", 64);
intent.putExtra("return-data", true);
startActivityForResult(intent, PHOTORESOULT);
}
public void surfaceDestroyed(SurfaceHolder holder) {
if(camera!=null){
if(MediaStore.ACTION_VIDEO_CAPTURE != null) ;
mCamera.release();
}
}*/
private String strVideoPath = "";// 视频文件的绝对路径
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// super.onActivityResult(requestCode, resultCode, data);
if (resultCode == REQUEST_CODE_TAKE_VIDEO) {
Uri uriVideo = data.getData();
Cursor cursor=this.getContentResolver().query(uriVideo, null, null, null, null);
if (cursor.moveToNext()) {
// _data:文件的绝对路径 ,_display_name:文件名
strVideoPath = cursor.getString(cursor.getColumnIndex("_data"));
Toast.makeText(this, strVideoPath, Toast.LENGTH_SHORT).show();
}
}

}
/* private MediaRecorder mediaRecorder;
protected void onDestroy() {
mediaRecorder.release();
super.onDestroy();
}*/
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式