android 监听拍照,Android 拍照 截图 事件监听实现
需求是获得用户截图,或者拍照的主动存图行为。
但是 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 拍照 截图 事件监听实现相关推荐
- java 监听鼠标点击_java 事件监听 - 鼠标
java 事件监听 - 鼠标 //事件监听 //鼠标事件监听 //鼠标事件监听有两个实现接口 //1.MouseListener 普通的鼠标操作 //2.MouseMotionListener 鼠标的 ...
- android之实现各个组件点击事件监听
注意:(TextView这个组件要点击产生效果的话,要设置,android:clickable="true"这个属性) 布局:layout/activity_main.xml &l ...
- java 事件监听应用_Spring Boot应用事件监听示例详解
前言 本文主要给大家介绍了关于Spring Boot应用事件监听的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧 1. Spring Boot特有的应用事件 除了Spring ...
- js: 添加事件监听addEventListener、移除事件监听removeEventListener
文档 https://developer.mozilla.org/zh-CN/docs/Web/API/EventTarget/addEventListener https://developer.m ...
- jQuery绑定事件监听bind和移除事件监听unbind用法实例详解
这里分别采用后bind(eventType,[data],Listener)//data为可选参数,one()该方法绑定的事件触发一次后自动删除,unbind(eventType,Listener), ...
- android通知栏显示,通知栏点击事件监听
android通知是通过Notification来实现的,显示在通知栏,不管是系统通知还是本地通知都可以通过Notification显示在通知栏中. 通知显示参考:https://blog.csdn. ...
- android按钮点击和抬起,android Button 的按下和抬起事件监听
代码实现的功能是使得一个按钮在按下的实现显示光色图安,抬起的时候的显示黄色图案. 然后图案自己设置形状.当然还可以缺一角什么的...... 为Button绑定 OnTouchListener 监听器. ...
- java redis监听问题_springboot+redis过期事件监听实现过程解析
1 修改 redis.conf配置文件: K Keyspace events, published with keyspace@ prefix事件 E Keyevent events, publish ...
- JavaFX实战:几种事件监听实现,键盘按键事件监听,鼠标滚轮事件监听,鼠标按键事件监听,鼠标移动事件监听
JavaFX实战系列 JavaFX源码分析和实战:javaFX线程结构分析 JavaFX源码分析和实战之launcher启动器:两种启动javaFX的方式及launch(args[])参数设置和获取 ...
最新文章
- mysql配置及其使用
- Python之路【第十四篇】:AngularJS --暂无内容-待更新
- vb.net2019-上传文件
- 多进程实现生产者消费者
- network packet
- 计算机房英语单词,主机房是什么意思
- react重新渲染菜单_React实现递归组件
- 逐渐摆脱高通和联发科!华为手机将采用更多麒麟芯片
- python requests session_Python requests模块session代码实例
- Spark Streaming的介绍和IDEA操作
- [转载] 【python】内置函数 slice()
- GitHub上最励志的计算机自学教程,绝对牛B
- 重写iframe内联框架中的内容
- 气象要素色斑图的配色
- 召唤神龙Ladon强化Cobalt Strike
- 【退役贴】再见了ACM,再会了算法竞赛
- 搭配Online:南方航2020年1月正式退出天合联盟
- mysql order by empty_MySQL随笔一
- 请按照以下要求设计一个学生类Student,并进行测试,要求如下:
- 一元二次求解matlab程序,怎么用matlab解一元二次方程