大家今天跟大家聊聊我这几天折腾的“盗摄学园安卓”的事儿。可别误会,我这可不是教大家干坏事,纯粹是出于技术研究的目的,满足一下好奇心,看看能不能在安卓上搞点不一样的东西出来。
我就是觉得这个名字挺有意思的,然后在网上搜了搜,发现信息不多,更激起了我的兴趣。我就琢磨着,能不能自己动手,看看能不能做出点什么。
我得找个安卓模拟器。下了个MuMu模拟器,这玩意儿挺好用,安装也简单,直接下一步下一步就搞定了。
就是得准备工具了。安卓开发嘛JDK、SDK那是必不可少的。我直接下载了Android Studio,这玩意儿集成了所有需要的工具,省事儿。安装过程比较慢,得耐心等待。
环境配置好之后,就开始我的“盗摄学园”项目了。先新建一个安卓项目,随便起了个名字,然后就开始琢磨怎么实现“盗摄”的功能。
所谓的“盗摄”,说白了就是调用手机的摄像头,然后在后台偷偷地拍照或者录像。这涉及到安卓的权限问题,必须先在*文件里声明需要的权限,比如摄像头权限、存储权限等等。
小编温馨提醒:本站只提供游戏介绍,下载游戏推荐89游戏,89游戏提供真人恋爱/绅士游戏/3A单机游戏大全,点我立即前往》》》绅士游戏下载专区
xml
光声明权限还不够,还得在代码里动态申请。安卓6.0之后,权限管理变得严格了,必须用户授权才行。我写了一段代码来申请权限:
java
if (*(this, *) != *_GRANTED) {
*(this, new String[]{*, *_EXTERNAL_STORAGE}, REQUEST_CAMERA_PERMISSION);
权限申请到手之后,就可以开始调用摄像头了。安卓提供了一个Camera类,可以用来控制摄像头。我写了一段代码,初始化摄像头,设置预览尺寸,然后就开始拍照。
java
Camera camera = *();
* parameters = *();
*(640, 480);
*(parameters);
*(null, null, new *() {
@Override
public void onPictureTaken(byte[] data, Camera camera) {
// 处理拍摄到的照片数据
拍照之后,就是保存照片了。我把照片保存到SD卡的一个指定目录里,方便查看。
java
File pictureFile = new File(*(*_PICTURES), "盗摄学园.jpg");
FileOutputStream fos = new FileOutputStream(pictureFile);
*(data);
这里有个坑要注意:安卓7.0之后,应用间共享文件需要使用FileProvider,否则会报错。我折腾了好久才搞明白,需要在*里配置FileProvider:xml
android:name="*.FileProvider" android:authorities="${applicationId}.fileprovider" android:exported="false" android:grantUriPermissions="true"> android:name="*_PROVIDER_PATHS" android:resource="@xml/file_paths" />
然后在res/xml目录下创建一个file_*文件:
xml
搞定了FileProvider,总算可以正常保存照片了。
为了让这个“盗摄”过程更隐蔽,我把拍照的代码放在了一个Service里,让它在后台运行。这样,用户就感觉不到拍照的过程了。
java
public class CameraService extends Service {
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
// 拍照代码
return START_STICKY;
整个过程下来,还是挺有挑战性的。遇到了不少坑,也学到了不少东西。虽然最终实现的功能很简单,但我觉得很有意义。
安卓权限管理很重要,必须动态申请。
FileProvider是应用间共享文件的关键。
Service可以让代码在后台运行。
我再次强调,这个“盗摄学园”只是出于技术研究的目的,大家千万不要用它来做非法的事情!