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(); }}
- android之给其他应用提供拍照信息
- 调用其他照相机应用拍照
- Android 自定义应用permission 权限给其他应用方式
- Android 应用拍照
- android 5.1源代码之自定义app名称 根据包名或者app名称对这个应用给其他语言的或者自定义的应用名称
- Android 之 拍照小结
- Android之Camera拍照
- Android多媒体之拍照
- Android开发之拍照
- Android之Camera拍照
- Android之拍照
- android之制作拍照
- [Android]将应用崩溃信息汇报给开发者
- [Android]将应用崩溃信息汇报给开发者
- Android中将应用崩溃信息汇报给开发者
- Android开发之给应用签名打包
- android 反编译其他应用
- android 打开其他应用
- make工程管理器
- 001_Oracle数据库、SQL语言的介绍
- C++ I/O流常用控制符
- HDU1587-Flowers
- leetcode-453-Minimum Moves to Equal Array Elements
- android之给其他应用提供拍照信息
- Activiti工作流引擎的官方实例配置详细步骤
- 【C++心路历程21】NOIP2003普及组复赛第4题数字游戏
- 替罪羊树学习总结
- LCA-并查集+tarjan-poj2874
- 工程管理器的简介以及shell脚本实践指南
- LCM调试总结
- makefile模板的修改步骤
- ubuntu 14 安装 shadowsocks-qt5 并配置 pac 全局代理