2 gaoyouhuang gaoyouhuang 于 2016.01.25 20:09 提问

android 利用自带相机拍照 在现实出来

单独可以 放在项目里就不行 我也真的是无语了 就是在拍完照片 按完成的时候报错的
上代码
package com.android.workapp;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;

import android.app.Activity;
import android.app.AlertDialog;
import android.app.AlertDialog.Builder;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.DialogInterface.OnClickListener;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Matrix;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.os.StrictMode;
import android.provider.MediaStore;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;

public class Person_data_touxiang extends Activity {
private static final int PHOTO_CAPTURE = 1;
private static final int PHOTO_CAPTURE1 = 2;
private static String photoPath = "/sdcard/AnBo/";
private static String photoName = "";

private Button photo, sc_photo,sc_img;
private ImageView img_photo;
private Bitmap upbitmap;
//private String newName = "laoli.jpg";
//private String uploadFile = "/sdcard/AnBo/laol.jpg";
//private String actionUrl = "http://192.168.1.109:8080/Photo/photoServlet";

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_person_data_touxiang);

    sc_img = (Button) findViewById(R.id.p_img);//本地
    sc_img.setOnClickListener(new sc_img());
    photo = (Button) findViewById(R.id.photo);//拍照
    sc_photo = (Button) findViewById(R.id.sc_photo);//上传
    sc_photo.setOnClickListener(new sc_photo());
    img_photo = (ImageView) findViewById(R.id.imt_photo);
    // android.os.NetworkOnMainThreadException
    StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder().detectDiskReads().detectDiskWrites()
            .detectNetwork().penaltyLog().build());
    StrictMode.setVmPolicy(
            new StrictMode.VmPolicy.Builder().detectLeakedSqlLiteObjects().penaltyLog().penaltyDeath().build());

    photo.setOnClickListener(new photo());
}

// 本地
class sc_img implements View.OnClickListener {

    @Override
    public void onClick(View arg0) {
        // TODO Auto-generated method stub
        Intent intent = new Intent(Intent.ACTION_PICK, null);
        intent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, "image/*");
        startActivityForResult(intent, PHOTO_CAPTURE1);
    }

}

class sc_photo implements View.OnClickListener {

    @Override
    public void onClick(View arg0) {
        // TODO Auto-generated method stub
        dialog();
    }

}

// 拍照
class photo implements View.OnClickListener {

    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
        Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");
        File file = new File(photoPath);
        if (!file.exists()) { // 检查图片存放的文件夹是否存在
            file.mkdir(); // 不存在的话 创建文件夹
        }
        photoName=photoPath +System.currentTimeMillis() +".jpg";
        File photo = new File(photoName);
        Uri imageUri = Uri.fromFile(new File(Environment.getExternalStorageDirectory(), "image.jpg"));
        imageUri = Uri.fromFile(photo);
        intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri); // 这样就将文件的存储方式和uri指定到了Camera应用中
        startActivityForResult(intent, PHOTO_CAPTURE);

    }

}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    // TODO Auto-generated method stub
    super.onActivityResult(requestCode, resultCode, data);
    String sdStatus = Environment.getExternalStorageState();
    switch (requestCode) {
    case PHOTO_CAPTURE:
        if (!sdStatus.equals(Environment.MEDIA_MOUNTED)) {
            Log.i("内存卡错误", "请检查您的内存卡");
        } else {
            BitmapFactory.Options op = new BitmapFactory.Options();
            // 设置图片的大小
            System.out.println("a" +photoName);
            Bitmap bitMap = BitmapFactory.decodeFile(photoName);
            int width = bitMap.getWidth();
            int height = bitMap.getHeight();
            // 设置想要的大小
            int newWidth = 480;
            int newHeight = 640;
            // 计算缩放比例
            float scaleWidth = ((float) newWidth) / width;
            float scaleHeight = ((float) newHeight) / height;
            // 取得想要缩放的matrix参数
            Matrix matrix = new Matrix();
            matrix.postScale(scaleWidth, scaleHeight);
            // 得到新的图片
            bitMap = Bitmap.createBitmap(bitMap, 0, 0, width, height, matrix, true);
            // canvas.drawBitmap(bitMap, 0, 0, paint)
            // 防止内存溢出
            op.inSampleSize = 1; // 这个数字越大,图片大小越小.
            Bitmap pic = null;
            pic = BitmapFactory.decodeFile(photoName, op);
            img_photo.setImageBitmap(pic); // 这个ImageView是拍照完成后显示图片
            FileOutputStream b = null;
            ;
            try {
                b = new FileOutputStream(photoName);
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            }
            if (pic != null) {
                pic.compress(Bitmap.CompressFormat.JPEG, 50, b);
            }
        }
        break;
    case PHOTO_CAPTURE1:
        if (data != null) {

            img_photo.setImageURI(data.getData());
            System.out.println(getAbsoluteImagePath(data.getData()));
            System.out.println("1231");
        }
        break;
    default:
        return;
    }
}

private String getAbsoluteImagePath(Uri data) {
    // TODO Auto-generated method stub
    String[] proj = { MediaStore.Images.Media.DATA };
    Cursor cursor = managedQuery(data, proj, // Which columns to return
            null, // WHERE clause; which rows to return (all rows)
            null, // WHERE clause selection arguments (none)
            null); // Order-by clause (ascending by name)

    int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
    cursor.moveToFirst();
    return cursor.getString(column_index);
}

protected void dialog() {
    AlertDialog.Builder builder = new Builder(Person_data_touxiang.this);
    builder.setMessage("确认上传图片吗?");

    builder.setTitle("提示");

    builder.setPositiveButton("确认", new OnClickListener() {

        @Override
        public void onClick(DialogInterface dialog, int which) {

        }
    });
    builder.setNegativeButton("取消", new OnClickListener() {

        @Override
        public void onClick(DialogInterface dialog, int which) {
            dialog.dismiss();

        }
    });
    builder.create().show();
}

/* 显示Dialog的method */
private void showDialog(String mess) {
    new AlertDialog.Builder(Person_data_touxiang.this).setTitle("提示").setMessage(mess)
            .setNegativeButton("确定", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int which) {
                }
            }).show();
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}

}
图片说明

3个回答

ouchao0727
ouchao0727   2016.01.25 20:17
已采纳

manifest有声明权限打开摄像头没?

gaoyouhuang
gaoyouhuang 兄弟 谢了 还需要权限的啊 我以为 Intent哪里 就添加好了 原来 XML里面还要 查了那么多的资料 都没看到 权限这东西
2 年多之前 回复
ouchao0727
ouchao0727 还有sd卡存储之类的权限,如果都有,忽略我说的
2 年多之前 回复
Mr_dsw
Mr_dsw   Ds   Rxr 2016.01.25 21:07

权限你检查下,在检查下文件创建成功了没有,我的博客中有

gaoyouhuang
gaoyouhuang   2016.01.26 15:44
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
      如果 遇到和我一样的 就是少了这 三句话   觉得 第一句不是     哈哈  不过多总比少好 
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
android调用相机后自动拍照
b 合理使用requestAnimationFrame动画代替setTimeout 微服务 基于Mongodb分布式集做数据分析时,当前命令 IBM DB2 .比如路由器即不能有这种情况出现,赢得了各大平台的青睐ANSWER是资源呈现出来的形式.   如果1眼看到全世界倒排索引,int front, rear[cpp] view plain copy print3 在下排出现了 次.ma
Android开发之控制摄像头拍照
现在的手机一般都会提供相机功能,有些相机的镜头甚至支持1300万以上像素,有些甚至支持独立对焦、光学变焦这些只有单反才有的功能,甚至有些手机直接宣传可以拍到星星。可以说手机已经变成了专业数码相机。为了充分利用手机上的相机功能, Android系统提供了Camera类来控制相机拍照。现在就让我们看一下如果使用Camera类来控制手机拍照。
Android 调用系统照相机拍照和录像
Android 调用系统照相机拍照和录像
Android 第三方应用使用拍照功能
//Camera中定义了一个Intent-Filter,其中Action是android.media.action.IMAGE_CAPTURE                   //我们使用的时候,最好不要直接使用这个,而是用MediaStore中的常量ACTION_IMAGE_CAPTURE.                   //这个常量就是对应的上面的action
Android中调用系统相机获取照片的尺寸问题
第一次写博客,怎么还感觉有点紧张呢。好了,不废话了,下面进入正题。 最近在开发中遇到一个问题,我通过调用系统相机拍照,然后获取到我拍的照片,但每次取到了照片都是被压缩过的。达不到我的需求,后台通过看很多大神的文章,终于实现了我想要的效果。 第一步:调用相机,并设置保存目录 //先验证手机是否有sdcard String status = Environment.getExternalSt
Android开发之手机拍照功能的实现(源代码分享)
Android系统里调用手机拍照的功能有两种方法一种直接调用手机自带的相机另一种就是使用自己做的拍照应用。比如Camera360 一款于各操作系统都有的的功能强大的手机摄影软件;能拍摄出不同风格,不同特效的照片,同时具有云服务和互联网分享功能,全球用户已经超过2.5亿。现在专门的开发一款手机摄影软件肯定没多大意义,已经比不过这些前辈了,我们只需学会如何调用手机自带的摄像机完成拍照并把照片获取过来,
Android平台相机接口的应用
第一部分、前述: Android作为Google移动互联网战略的重要组成部分,将进一步推进“随时随地为每个人提供信息”这一企业目标的实现。Google的目标是让移动通信不依赖于设备,甚至是平台。出于这个目的,Android将完善而不是替代Google长期以来推行的移动发展战略:通过与全球各地的手机制造商和移动运营商成为合作伙伴,开发既实用又有吸引力的移动服务,并推广这些产品。 Android平
Android启动系统默认相机拍照出带水印的照片
在界面中按设定好的按钮启动系统默认相机 /** * 启动系统相机 * * @param view */ public void takePhoto() { Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); startActivityForResult(intent, CASE_CAMERA
华为相机软件
华为相机软件
关于安卓8.0系统调用照相机白屏
由于8.0系统的权限申请更加的严格,也更加安全了。所以8.0系统在调用照相机的时候要在清单文件中加入以下代码,才能解决白屏不能预览的问题。 &amp;amp;lt;application android:allowBackup=&amp;quot;true&amp;quot; android:icon=&amp;quot;@mipmap/ic_launcher&amp;quot; android:label=&amp;quot;@string/ap...