需求是获得用户截图,或者拍照的主动存图行为。

但是 android 官方没有提供回调广播之类的实现监听,所以需要用另一种方式达到需求,这里实现的就是通过监听media文件夹实现目的。

所需权限:

android:name="android.permission.READ_EXTERNAL_STORAGE"/>

public abstract class ScreenShotContentObserver extends ContentObserver {

private Context context;

private boolean isFromEdit = false;

private String previousPath;

public ScreenShotContentObserver(Handler handler, Context context) {

super(handler);

this.context = context;

}

@Override

public boolean deliverSelfNotifications() {

return super.deliverSelfNotifications();

}

@Override

public void onChange(boolean selfChange) {

super.onChange(selfChange);

}

@Override

public void onChange(boolean selfChange, Uri uri) {

Cursor cursor = null;

try {

cursor = context.getContentResolver().query(uri, new String[]{

MediaStore.Images.Media.DISPLAY_NAME,

MediaStore.Images.Media.DATA

}, null, null, null);

if (cursor != null && cursor.moveToLast()) {

int displayNameColumnIndex = cursor.getColumnIndex(MediaStore.Images.Media.DISPLAY_NAME);

int dataColumnIndex = cursor.getColumnIndex(MediaStore.Images.Media.DATA);

String fileName = cursor.getString(displayNameColumnIndex);

String path = cursor.getString(dataColumnIndex);

// if (new File(path).lastModified() >= System.currentTimeMillis() - 10000) {

// if (isScreenshot(path) && !isFromEdit && !(previousPath != null && previousPath.equals(path))) {

// onScreenShot(path, fileName);

// }

// previousPath = path;

// isFromEdit = false;

// } else {

// cursor.close();

// return;

// }

Log.e("take pic", fileName + "----" + path);

}

} catch (Exception e) {

e.printStackTrace();

isFromEdit = true;

} finally {

if (cursor != null) {

cursor.close();

}

}

super.onChange(selfChange, uri);

}

private boolean isScreenshot(String path) {

return path != null && path.toLowerCase().contains("screenshot");

}

protected abstract void onScreenShot(String path, String fileName);

}

public class MainActivity extends AppCompatActivity {

private ScreenShotContentObserver screenShotContentObserver;

private Handler handler = new Handler();

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

screenShotContentObserver = new ScreenShotContentObserver(handler, this) {

@Override

protected void onScreenShot(String path, String fileName) {

}

};

}

@Override

public void onResume() {

super.onResume();

getContentResolver().registerContentObserver(

MediaStore.Images.Media.EXTERNAL_CONTENT_URI,

true,

screenShotContentObserver

);

}

@Override

public void onDestroy() {

super.onDestroy();

try {

getContentResolver().unregisterContentObserver(screenShotContentObserver);

} catch (Exception e) {

e.printStackTrace();

}

}

}

三星 华为测试通过:

Screenshot_2018-02-19-07-09-48.jpeg----/storage/emulated/0/Pictures/Screenshots/Screenshot_2018-02-19-07-09-48.jpeg

IMG_20180219_071018.jpg----/storage/emulated/0/DCIM/Camera/IMG_20180219_071018.jpg

源码下载:

http://download.csdn.net/download/fff2666/10194071

android 监听拍照,Android 拍照 截图 事件监听实现相关推荐

  1. java 监听鼠标点击_java 事件监听 - 鼠标

    java 事件监听 - 鼠标 //事件监听 //鼠标事件监听 //鼠标事件监听有两个实现接口 //1.MouseListener 普通的鼠标操作 //2.MouseMotionListener 鼠标的 ...

  2. android之实现各个组件点击事件监听

    注意:(TextView这个组件要点击产生效果的话,要设置,android:clickable="true"这个属性) 布局:layout/activity_main.xml &l ...

  3. java 事件监听应用_Spring Boot应用事件监听示例详解

    前言 本文主要给大家介绍了关于Spring Boot应用事件监听的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧 1. Spring Boot特有的应用事件 除了Spring ...

  4. js: 添加事件监听addEventListener、移除事件监听removeEventListener

    文档 https://developer.mozilla.org/zh-CN/docs/Web/API/EventTarget/addEventListener https://developer.m ...

  5. jQuery绑定事件监听bind和移除事件监听unbind用法实例详解

    这里分别采用后bind(eventType,[data],Listener)//data为可选参数,one()该方法绑定的事件触发一次后自动删除,unbind(eventType,Listener), ...

  6. android通知栏显示,通知栏点击事件监听

    android通知是通过Notification来实现的,显示在通知栏,不管是系统通知还是本地通知都可以通过Notification显示在通知栏中. 通知显示参考:https://blog.csdn. ...

  7. android按钮点击和抬起,android Button 的按下和抬起事件监听

    代码实现的功能是使得一个按钮在按下的实现显示光色图安,抬起的时候的显示黄色图案. 然后图案自己设置形状.当然还可以缺一角什么的...... 为Button绑定 OnTouchListener 监听器. ...

  8. java redis监听问题_springboot+redis过期事件监听实现过程解析

    1 修改 redis.conf配置文件: K Keyspace events, published with keyspace@ prefix事件 E Keyevent events, publish ...

  9. JavaFX实战:几种事件监听实现,键盘按键事件监听,鼠标滚轮事件监听,鼠标按键事件监听,鼠标移动事件监听

    JavaFX实战系列 JavaFX源码分析和实战:javaFX线程结构分析 JavaFX源码分析和实战之launcher启动器:两种启动javaFX的方式及launch(args[])参数设置和获取 ...

最新文章

  1. mysql配置及其使用
  2. Python之路【第十四篇】:AngularJS --暂无内容-待更新
  3. vb.net2019-上传文件
  4. 多进程实现生产者消费者
  5. network packet
  6. 计算机房英语单词,主机房是什么意思
  7. react重新渲染菜单_React实现递归组件
  8. 逐渐摆脱高通和联发科!华为手机将采用更多麒麟芯片
  9. python requests session_Python requests模块session代码实例
  10. Spark Streaming的介绍和IDEA操作
  11. [转载] 【python】内置函数 slice()
  12. GitHub上最励志的计算机自学教程,绝对牛B
  13. 重写iframe内联框架中的内容
  14. 气象要素色斑图的配色
  15. 召唤神龙Ladon强化Cobalt Strike
  16. 【退役贴】再见了ACM,再会了算法竞赛
  17. 搭配Online:南方航2020年1月正式退出天合联盟
  18. mysql order by empty_MySQL随笔一
  19. 请按照以下要求设计一个学生类Student,并进行测试,要求如下:
  20. 一元二次求解matlab程序,怎么用matlab解一元二次方程

热门文章

  1. android 如何调用WPS显示工作文件
  2. Google 内部的 Python 代码风格指南(译)
  3. 慕课网的requirejs
  4. Google Python代码风格指南
  5. Python知识点总结和例题
  6. Facebook公共主页内容品质和公共主页被封会有联系吗?
  7. C++软件开发面试题总结
  8. 只要几步,微信小程序就能转为APP
  9. 前京东物流CEO王振辉复出:出任协鑫能科联席总裁兼CEO
  10. QT 基于AES加解密的使用,解析java端发来的密文