Android framework定制1-->用户无操作一段时间,自动播放客户提供的视频,用户操作后退出播放

在PowerManagerService.java中监听用户操作,10秒无操作则打开预置的apk播放视频,直接上代码:

--- a/frameworks/base/services/core/java/com/android/server/power/PowerManagerService.java
+++ b/frameworks/base/services/core/java/com/android/server/power/PowerManagerService.java
@@ -2359,6 +2359,17 @@ public final class PowerManagerService extends SystemService}}+		//用户无操作10s后,通过intent启动循环播放视频的apk
+                if(now-mLastUserActivityTime>=10000 && mBootCompleted && mSystemReady){
+
+                    Intent intent = new Intent();
+                    intent.setClassName("com.example.autoplayvedio","com.example.autoplayvedio.MainActivity");
+                     intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+                      mContext.startActivity(intent);
+
+                }
+
+if (mUserActivitySummary != USER_ACTIVITY_SCREEN_DREAM && userInactiveOverride) {if ((mUserActivitySummary &(USER_ACTIVITY_SCREEN_BRIGHT | USER_ACTIVITY_SCREEN_DIM)) != 0) {

apk autoplayvideo 的关键代码:

AndroidManifest.xml:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"package="com.example.autoplayvedio"><applicationandroid:allowBackup="true"android:icon="@mipmap/ic_launcher"android:label="@string/app_name"android:roundIcon="@mipmap/ic_launcher_round"android:supportsRtl="true"android:theme="@style/Theme.AppCompat.DayNight.NoActionBar"><activityandroid:name=".MainActivity"android:screenOrientation="landscape"android:exported="true"><intent-filter><action android:name="android.intent.action.MAIN" /><!-- 系统中不生成apk图标 --><data android:host="LaunchActivity" android:scheme="com.example.autoplayvedio" tools:ignore="AppLinkUrlError"/><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity></application></manifest>
package com.example.autoplayvedio;import androidx.appcompat.app.AppCompatActivity;
import android.media.MediaPlayer;
import android.net.Uri;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.view.WindowManager;
import android.widget.VideoView;public class MainActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);VideoView video = findViewById(R.id.video);android.widget.MediaController mc = new android.widget.MediaController(MainActivity.this);//本地连接地址//res目录下新建raw目录,视频上传至此处String uri = "android.resource://" + getPackageName() + "/" + R.raw.vedio;video.setVideoURI(Uri.parse(uri));video.setMediaController(mc);mc.setMediaPlayer(video);video.requestFocus();video.start();video.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {@Overridepublic void onPrepared(MediaPlayer mp) {mp.setLooping(true);//让视频循环播放}});//监听到触摸事件后,执行  System.exit(0);video.setOnTouchListener((view, motionEvent) -> {if (motionEvent.getAction() == MotionEvent.ACTION_DOWN) {Log.d("guoyh", "Touched the screen");// finish();System.exit(0);}return false;});}}

activity_main.xml:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity"><VideoViewandroid:id="@+id/video"android:layout_width="match_parent"android:layout_height="match_parent" /></RelativeLayout>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/192010.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Mac卸载、安装Python

卸载 说明 对于删除 Python&#xff0c;我们首先要知道其具体都安装了什么&#xff0c;实际上&#xff0c;在安装 Python 时&#xff0c;其自动生成&#xff1a; Python framework&#xff0c;即 Python 框架&#xff1b;Python 应用目录&#xff1b;指向 Python 的连接。 …

网络冗余保护技术的研究与实现

摘要 .现在网络服务的安全性和可靠性变的越来越重要,如果网络中的网关设备出现问题,将会导致网络不能提供正常的服务。本文利用集群技术一一虚拟路由冗余协议(virtualRouterRedundaneyprotoeol,简称VRRP)来实现网关的高可用性,使得在一台网关设备宕机时,另外一个备份网关会及时…

mazing是什么软件?为什么选择iMazing

说起iOS设备管理工具&#xff0c;可能大家还有点陌生&#xff0c;其实就是Apple公司开发的移动设备&#xff0c;因其的操作系统是独特的iOS系统&#xff0c;所以又叫iOS设备。比如大家都在用的iPhone手机&#xff0c;就是这样类型的一个设备。 mazing是什么软件? iMazing是一…

【Linux】Ubuntu添加root用户

在Ubuntu中&#xff0c;默认情况下是禁用了root用户的登录。如果仍然想要启用root用户&#xff0c;并设置root用户的密码&#xff0c;应按照以下步骤进行操作&#xff1a; 一、输入sudo passwd root设置root用户密码 二、切换root用户 sudo -i su root 这两条命令均可却换至…

Rust语言入门教程(十) - Trait与泛型

Trait 与泛型 欢迎使用并贡献我的开源webhook工具: https://github.com/owenchenxy/rusthook/什么是Trait 在Rust中,没有类继承,或者说没有结构体的继承。但是,大多数的面向对象的语言都是有继承特性的,那Rust还算是一门面向对象的语言吗?实际上没有一个普适的定义来判断…

前端入门(四)Ajax、Promise异步、Axios通信、vue-router路由、组件库

文章目录 AjaxAjax特点 Promise 异步编程&#xff08;缺&#xff09;Promise基本使用状态 - PromiseState结果 - PromiseResult AxiosVue中使用AxiosAxios请求方式getpostput和patchdelete并发请求 Vue路由 - vue-router单页面Web应用&#xff08;single page web application&…

Android HCI日志分析案例2

案例1--蓝牙音箱电量用完后&#xff0c;配对一直失败&#xff0c;提示PIN码不正确 基于MTK平台&#xff0c;通过MTKLogger开启保存HCI日志 问题定位分析 Android日志查看logcat 搜索到关键log 01-20 10:07:55.403760 978 1075 V bt_stack: [VERBOSE2:btm_inq.cc(2032)] …

编程实战:类C语法的编译型脚本解释器(三)

系列入口&#xff1a; 编程实战&#xff1a;类C语法的编译型脚本解释器&#xff08;系列&#xff09;-CSDN博客 本文讲解插件&#xff08;自定义函数&#xff09;的接口。 一、插件接口 //插件struct CPlugin{string plugin_name;Variable::types plugin_return_type;CPlugin(…

Stream

什么是Stream&#xff1f; 也叫Stream流&#xff0c;是jdk8开始新增的一套API&#xff0c;可以用来操作集合或者数组的数据 优势&#xff1a;Stream流大量的结合了Lambda的语法风格来编程&#xff0c;提供了一种更加强大&#xff0c;更加简单的方式操作集合或数组中的数据&am…

高防服务器的工作原理_Maizyun

随着互联网的快速发展&#xff0c;网络安全问题日益突出。高防服务器作为一种有效的网络安全防御手段&#xff0c;广泛应用于各种网络环境中。本文将详细介绍高防服务器的工作原理&#xff0c;帮助大家更好地理解其作用和优势。 一、高防服务器概述 高防服务器主要是指能够提…

详解Spring工厂是如何获取Aop中的代理对象的

&#x1f609;&#x1f609; 学习交流群&#xff1a; ✅✅1&#xff1a;这是孙哥suns给大家的福利&#xff01; ✨✨2&#xff1a;我们免费分享Netty、Dubbo、k8s、Mybatis、Spring...应用和源码级别的视频资料 &#x1f96d;&#x1f96d;3&#xff1a;QQ群&#xff1a;583783…

Ext4文件系统解析(一)

1、前言 熟悉Linux操作系统的都应该或多或少的了解或者使用过Ext4文件系统。 接下来&#xff0c;会简单介绍Ext4文件系统的一些特性和工作原理。 2、常用概念 在介绍Ext文件系统之前&#xff0c;先简单描述一些相关概念。 块(Block)&#xff1a;Ext文件系统存储分配的基本单…

【探索Linux】—— 强大的命令行工具 P.19(多线程 | 线程的概念 | 线程控制 | 分离线程)

阅读导航 引言一、 Linux线程概念1. 什么是线程2. 线程的概念3. 线程与进程的区别4. 线程异常 二、Linux线程控制1. POSIX线程库2. 创建线程 pthread_create() 函数&#xff08;1&#xff09;头文件&#xff08;2&#xff09;函数原型&#xff08;3&#xff09;参数解释&#x…

Spring MVC学习随笔-控制器(Controller)开发详解:控制器跳转与作用域(一)

学习视频&#xff1a;孙哥说SpringMVC&#xff1a;结合Thymeleaf&#xff0c;重塑你的MVC世界&#xff01;&#xff5c;前所未有的Web开发探索之旅 第五章、SpringMVC控制器开发详解 三 5.1 核心要点 3.流程跳转 5.2 JavaWeb中流程跳转的核心回顾 5.2.1 JavaWeb中流程跳转的核…

[传智杯 #3 初赛] 课程报名

题目描述 传智播客推出了一款课程&#xff0c;并进行了一次促销活动。具体来说就是&#xff0c;课程的初始定价为 v 元&#xff1b;每报名 m 个学员&#xff0c;课程的定价就要提升 a 元。由于课程能够容纳的学生有限&#xff0c;因此报名到 n 人的时候就停止报名。 现在老师…

20231202_python练习_b站视频爬取(selenium浏览器模拟登录版)

首先手工登录一次获取cookies&#xff0c;然后进行数据保存 from selenium import webdriver from selenium.webdriver.chrome.service import Service from selenium.webdriver.common.by import By import time import json# 创建Chrome浏览器对象 chrome_opt webdriver.Ch…

网络入门---网络编程初步认识和实践

目录标题 前言准备工作udpserver.hpp成员变量构造函数初始化函数(socket,bind)start函数(recvfrom) udpServer.ccudpClient.hpp构造函数初始化函数run函数(sendto) udpClient.cc测试 前言 在上一篇文章中我们初步的认识了端口号的作用&#xff0c;ip地址和MAC地址在网络通信时…

QT 中 QProgressDialog 进度条窗口 备查

基础API //两个构造函数 QProgressDialog::QProgressDialog(QWidget *parent nullptr, Qt::WindowFlags f Qt::WindowFlags());QProgressDialog::QProgressDialog(const QString &labelText, const QString &cancelButtonText, int minimum, int maximum, QWidget *…

面试 Java 基础八股文十问十答第三期

面试 Java 基础八股文十问十答第三期 作者&#xff1a;程序员小白条&#xff0c;个人博客 ⭐点赞⭐收藏⭐不迷路&#xff01;⭐ 21.说下Java8的Stream流的常用方法 答: forEach遍历、find、match进行匹配reduce进行归约&#xff0c;比如求和&#xff0c;乘&#xff0c;除聚合…

base64转PDF

今天做皖事通的对接&#xff0c;下载电子证照后发现回传的是base64&#xff0c;调试确认是个麻烦事&#xff0c;网上搜了一下没有base64转PDF的在线预览功能&#xff0c;只能自己写个调试工具了&#xff0c;以下是通过纯JS方式写的代码&#xff0c;可直接拿去使用&#xff1a; …