android之给其他应用提供拍照信息

来源:互联网 发布:网络对大学生的好处 编辑:程序博客网 时间:2024/06/05 00:24

本文只是记录一些零碎的东西

只是一个简单的模拟
给其他应用提供数据
做一个拍照功能,系统可以调用我的拍照,返回数据给调用者
google : https://developer.android.com/training/basics/intents/filters.html
文章介绍的很详细,但是我并没有找到我想要的
其实文章也还是很有用的,最起码告诉你 需要 setResult(RESULT_OK);

看看实现的效果图 ,可以设置默认拍照应用

git 仓库 https://github.com/CL-window/cameraForResult

   


怎么把拍照数据返回回去,没错 通过启动我们应用的Intent
Uri saveUri = getIntent().getExtras().getParcelable(MediaStore.EXTRA_OUTPUT);

OutputStream outputStream = null;
try {
outputStream = getContentResolver().openOutputStream(saveUri);
if (outputStream != null ) {
photo.compress(Bitmap.CompressFormat.JPEG,100,outputStream);// write your bitmap here
setResult(RESULT_OK);
}
} catch (IOException e) {
e.printStackTrace();
}

怎么指定我们的应用程序拍照
app/src/main/AndroidManifest.xml
<intent-filter>
<action android:name="android.media.action.IMAGE_CAPTURE"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>


记录一个很奇怪的问题
设置app为默认拍照软件后,CapturePictureActivity 一直循环在新建,导致崩溃
只是新建,没有destroy,但是取消这个设置后就没有问题
问题原因没有找到 感觉猜测是 startActivityForResult 的缘故,因为启动的这个界面是startActivityForResult启动的
然后这个界面又 startActivityForResult 一个新的界面,只是猜测
附上一段日志,简直要疯了的节奏
01-20 16:35:34.930 19392-19392/com.cl.slack.cameraforresult I/CapturePictureActivity: onCreate...com.cl.slack.cameraforresult.CapturePictureActivity@9de6483
01-20 16:35:34.930 19392-19392/com.cl.slack.cameraforresult I/CapturePictureActivity: openSystemCamera...
01-20 16:35:34.955 19392-19392/com.cl.slack.cameraforresult I/CapturePictureActivity: onCreate...com.cl.slack.cameraforresult.CapturePictureActivity@3bb28e2
01-20 16:35:34.955 19392-19392/com.cl.slack.cameraforresult I/CapturePictureActivity: openSystemCamera...
01-20 16:35:34.978 19392-19392/com.cl.slack.cameraforresult I/CapturePictureActivity: onCreate...com.cl.slack.cameraforresult.CapturePictureActivity@f00ec1d
01-20 16:35:34.978 19392-19392/com.cl.slack.cameraforresult I/CapturePictureActivity: openSystemCamera...
01-20 16:35:35.000 19392-19392/com.cl.slack.cameraforresult I/CapturePictureActivity: onCreate...com.cl.slack.cameraforresult.CapturePictureActivity@9afb24
01-20 16:35:35.000 19392-19392/com.cl.slack.cameraforresult I/CapturePictureActivity: openSystemCamera...
01-20 16:35:35.022 19392-19392/com.cl.slack.cameraforresult I/CapturePictureActivity: onCreate...com.cl.slack.cameraforresult.CapturePictureActivity@4470ca7
01-20 16:35:35.022 19392-19392/com.cl.slack.cameraforresult I/CapturePictureActivity: openSystemCamera...
01-20 16:35:35.049 19392-19392/com.cl.slack.cameraforresult I/CapturePictureActivity: onCreate...com.cl.slack.cameraforresult.CapturePictureActivity@a98016
01-20 16:35:35.049 19392-19392/com.cl.slack.cameraforresult I/CapturePictureActivity: openSystemCamera...
01-20 16:35:35.072 19392-19392/com.cl.slack.cameraforresult I/CapturePictureActivity: onCreate...com.cl.slack.cameraforresult.CapturePictureActivity@1cbf8a1
01-20 16:35:35.072 19392-19392/com.cl.slack.cameraforresult I/CapturePictureActivity: openSystemCamera...
01-20 16:35:35.093 19392-19392/com.cl.slack.cameraforresult I/CapturePictureActivity: onCreate...com.cl.slack.cameraforresult.CapturePictureActivity@f314438
01-20 16:35:35.093 19392-19392/com.cl.slack.cameraforresult I/CapturePictureActivity: openSystemCamera...
01-20 16:35:35.115 19392-19392/com.cl.slack.cameraforresult I/CapturePictureActivity: onCreate...com.cl.slack.cameraforresult.CapturePictureActivity@b4b3e8b
01-20 16:35:35.115 19392-19392/com.cl.slack.cameraforresult I/CapturePictureActivity: openSystemCamera...
01-20 16:35:35.138 19392-19392/com.cl.slack.cameraforresult I/CapturePictureActivity: onCreate...com.cl.slack.cameraforresult.CapturePictureActivity@2e0200a
01-20 16:35:35.138 19392-19392/com.cl.slack.cameraforresult I/CapturePictureActivity: openSystemCamera...
01-20 16:35:35.163 19392-19392/com.cl.slack.cameraforresult I/CapturePictureActivity: onCreate...com.cl.slack.cameraforresult.CapturePictureActivity@1a868e5
01-20 16:35:35.163 19392-19392/com.cl.slack.cameraforresult I/CapturePictureActivity: openSystemCamera...
01-20 16:35:35.183 19392-19392/com.cl.slack.cameraforresult I/CapturePictureActivity: onCreate...com.cl.slack.cameraforresult.CapturePictureActivity@4f1580c
01-20 16:35:35.183 19392-19392/com.cl.slack.cameraforresult I/CapturePictureActivity: openSystemCamera...
01-20 16:35:35.204 19392-19392/com.cl.slack.cameraforresult I/CapturePictureActivity: onCreate...com.cl.slack.cameraforresult.CapturePictureActivity@ed59e2f
01-20 16:35:35.204 19392-19392/com.cl.slack.cameraforresult I/CapturePictureActivity: openSystemCamera...


换成自己的拍照实现方式

代码的基础 android-Camera2Basic

没有几行代码

import android.Manifest;import android.content.Intent;import android.content.pm.PackageManager;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.net.Uri;import android.os.Build;import android.os.Bundle;import android.os.Handler;import android.os.Looper;import android.os.Message;import android.provider.MediaStore;import android.support.annotation.NonNull;import android.support.v4.app.ActivityCompat;import android.support.v7.app.AppCompatActivity;import android.util.Log;import java.io.IOException;import java.io.OutputStream;import java.util.Arrays;public class CapturePictureActivity extends AppCompatActivity {    private static final String TAG = "CapturePictureActivity";    private static final int CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE = 0x100;    private static final int CHECK_PERMISSION_REQUEST_CODE = 0x101;    private Uri saveUri;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        Log.i(TAG, "onCreate..." + this.toString());        setContentView(R.layout.activity_camera_capture);        initSaveUri();        checkPermission(Manifest.permission.CAMERA);        // 自定义拍照 使用的google demo        getFragmentManager().beginTransaction()                .replace(R.id.container, Camera2BasicFragment.newInstance().setBitmapListener(listener))                .commit();    }    /**     * this is only one param     *     * @param permissions     */    private void checkPermission(String... permissions) {        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {            openSystemCamera();            return;        }        if (ActivityCompat.checkSelfPermission(this, permissions[0]) == PackageManager.PERMISSION_GRANTED) {            openSystemCamera();        } else {            ActivityCompat.requestPermissions(this,                    Arrays.copyOf(permissions, 1), CHECK_PERMISSION_REQUEST_CODE);        }    }    private void initSaveUri() {        Intent intent = getIntent();        if (intent != null) {            Bundle b = intent.getExtras();            if (b != null) {                saveUri = b.getParcelable(MediaStore.EXTRA_OUTPUT);            } else {                saveUri = null;            }        } else {            saveUri = null;        }    }    /**     * 简单的演示,就直接利用系统自带的相机应用:拍照     */    private void openSystemCamera() {        Log.i(TAG, "openSystemCamera...");        // 调用系统拍照//        Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);//        startActivityForResult(intent, CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE);        // 测试直接返回一张图片//        testBitmap();    }    Camera2BasicFragment.OnPhotoListener listener = new Camera2BasicFragment.OnPhotoListener() {        @Override        public void onBitmap(Bitmap bitmap) {            returnBackBitmap(bitmap);        }        @Override        public void onByte(byte[] bytes) {            returnBackBitmap(bytes);        }    };    private void testBitmap(){        Bitmap bitmap = null;        try {            bitmap = BitmapFactory.decodeStream(getAssets().open("testImg.png"));        } catch (IOException e) {            e.printStackTrace();        }        returnBackBitmap(bitmap);    }    @Override    protected void onActivityResult(int requestCode, int resultCode, Intent data) {        if (requestCode == CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE) {            if (data == null) {                finish();                return;            }            Bitmap photo = data.getParcelableExtra("data");            if (photo == null) {                finish();                return;            }            returnBackBitmap(photo);        }    }    private void returnBackBitmap(Bitmap photo) {        if (saveUri != null) {            // Save the bitmap to the specified URI (use a try/catch block)            OutputStream outputStream = null;            try {                outputStream = getContentResolver().openOutputStream(saveUri);                if (outputStream != null) {                    photo.compress(Bitmap.CompressFormat.JPEG, 100, outputStream);// write your bitmap here//                        setResult(RESULT_OK);                }            } catch (IOException e) {                e.printStackTrace();            } finally {                photo.recycle();                if (outputStream != null) {                    try {                        outputStream.close();                    } catch (IOException e) {                        e.printStackTrace();                    }                }                finish();            }        } else {            finish();        }    }    private void returnBackBitmap(byte[] bytes) {        if (saveUri != null) {            // Save the bitmap to the specified URI (use a try/catch block)            OutputStream outputStream = null;            try {                outputStream = getContentResolver().openOutputStream(saveUri);                if (outputStream != null) {                    outputStream.write(bytes);// write your bitmap here                }            } catch (IOException e) {                e.printStackTrace();            } finally {                if (outputStream != null) {                    try {                        outputStream.close();                    } catch (IOException e) {                        e.printStackTrace();                    }                }                finish();            }        } else {            finish();        }    }    @Override    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {        if (requestCode == CHECK_PERMISSION_REQUEST_CODE) {            if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {                openSystemCamera();            }        }    }    @Override    public void finish() {        Log.i(TAG, "finish...");        setResult(RESULT_OK);        super.finish();    }}


0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 牙齿长蛀牙有洞怎么办 牙齿空了洞疼痛怎么办 牙齿破了个洞怎么办 后牙齿有个大洞怎么办 大牙烂了个洞,痛怎么办 牙黑了有洞怎么办 牙齿内侧掉了一小块怎么办 龋坏的牙齿痛怎么办 2岁半宝宝蛀牙怎么办 3岁宝宝门牙腐蚀怎么办 2岁宝宝门牙有洞怎么办 三岁宝宝有龋齿怎么办 牙龈肿痛脸肿了怎么办 孕妇牙疼的厉害怎么办 智齿引起的牙疼怎么办 蛀牙了有个大洞牙痛怎么办 长了蛀牙牙疼怎么办 面饼表面长黑点怎么办 牙结石自己掉了怎么办 狗狗得了牙结石怎么办 牙结石掉了有洞怎么办 内衣的钩子会掉怎么办? 新胸罩肩带老掉怎么办 牙齿少了一小块怎么办 儿童牙齿有黑斑要怎么办 牙齿又黄又臭怎么办 大牙烂空了很臭怎么办 牙齿已经烂没了怎么办 牙齿已经蛀没了怎么办 牙齿整个蛀掉了怎么办 小孩恒牙长歪了怎么办 孩子换牙长歪了怎么办 9岁门牙磕松动了怎么办 牙齿摔断了一半怎么办 牙齿从根部断了怎么办 牙断了还有牙根怎么办 牙根断在牙龈里怎么办 后槽牙掉了一半怎么办 孩子门牙摔断了怎么办 2岁宝宝牙齿断了怎么办 小孩乳牙摔掉了怎么办