前段时间客户提出了一个小需求。需要实现开机后插入U盘,自动播放U盘里面的视频。为了完成这个需求,是这样处理的,APP开机启动,创建服务,监听U盘的插入。我们有两个问题需要处理,第一是APP需要开机启动;第二是需要在监听U盘的插入。
实现APP开机启动
我们可以通过监听开机广播启动APP来实现开机启动。具体实现如下:
1、在AndroidManifest.xml中添加广播接收

</application>
..............     <receiverandroid:name=".Myreceiver"><intent-filter><action android:name="android.intent.action.BOOT_COMPLETED"/></intent-filter></receiver>
</application>

2、创建Myreceiver.java

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Environment;
import android.util.Log;public class Myreceiver extends BroadcastReceiver {private String TAG = "VideoPlayer";@Overridepublic void onReceive(Context context, Intent intent) {Log.d(TAG, "onReceive: receive boardcast. Start service");Intent startServiceIntent = new Intent(context,MyService.class);context.startService(startServiceIntent);}
}
实现U盘插入并获取路径
U盘插入的检测,找了很多资料在实现的过程中都遇到了一些问题。最后,还是找到了一条实现的方法:监听U盘的插入广播,在检测到U盘挂载上之后,通过反射调用VolumInfo的方法获取U盘路径。终归是经验不足,能力有待提升导致的过程比较坎坷。下面慢慢的介绍一下。
1、U盘插入的广播
安卓6.0和之前的版本不一样,在插入U盘的时候发出广播:android.hardware.usb.action.USB_DEVICE_ATTACHE
android.os.storages.action.VOLUME_STATE_CHANGED
不会发出MEDIA_MOUNT广播,也不会在广播里带路径。这里还有一点需要注意的是,USB_DEVICE_ATTACHE发出后但是U盘并没有挂载上,需要几秒之后发出VOLUME_STATE_CHANGED,广播里带来状态值,当状态值为MOUNTED的时候U盘才挂载上,我们才能去获取U盘的路径。
STATE_CHANGED广播的state包括了MOUNTEDUNMOUNT等状态,我们可以在VolmueInfo.class中看到对应的值。
VolmueInfo.class这个默认是不可见的,需要通过反射来调用它的方法。
2、获取U盘路径
public static String getUdiskPath(Context mContext){String pathString = null;StorageManager mStorageManager = (StorageManager) mContext.getSystemService(Context.STORAGE_SERVICE);try {Class storeManagerClazz = Class.forName("android.os.storage.StorageManager"); // 反射查找类Method getVolumesMethod = storeManagerClazz.getMethod("getVolumes");          // 反射查找方法List<?> volumeInfos = (List<?>)getVolumesMethod.invoke(mStorageManager);      // 调用方法Class volumeInfoClazz = Class.forName("android.os.storage.VolumeInfo");       // 反射查找类Method getFsUuidMethod = volumeInfoClazz.getMethod("getFsUuid");              // 反射查找方法Field pathField = volumeInfoClazz.getDeclaredField("path");                   // 查找变量if(volumeInfos != null) {for (Object volumeInfo : volumeInfos) {String uuid = (String) getFsUuidMethod.invoke(volumeInfo);            // 调用方法if (uuid != null) {Log.e(TAG, "getUdiskPath: " + uuid.toString());pathString = (String) pathField.get(volumeInfo);//U盘路径}}}}catch (Exception e){e.printStackTrace();}return pathString;}

3、播放视屏

public void onCreate() {super.onCreate();mContext = getApplicationContext();IntentFilter intentFilter = new IntentFilter();intentFilter.addAction("android.os.storage.action.VOLUME_STATE_CHANGED");registerReceiver(new BroadcastReceiver() {@Overridepublic void onReceive(Context context, Intent intent) {int i = intent.getIntExtra("android.os.storage.extra.VOLUME_STATE",0);if (i != 2){Log.e(TAG, "onReceive: state is " + i);return;}// 获取u盘路径String path = getUdiskPath(mContext);Log.e(TAG, "onCreate: U盘路径是:" + path);Uri videoUri = Uri.parse(path + "/test.mp4");// 启动视屏播放Intent startVideoIntent = new Intent(Intent.ACTION_VIEW, videoUri);startVideoIntent.setDataAndType(videoUri, "video/mp4");startVideoIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);startActivity(startVideoIntent);}}, intentFilter);}

android 6.0开机后自动播放U盘视频相关推荐

  1. u盘自动运行bat_如何让u盘插入电脑后自动播放 u盘插入电脑后自动播放方法

    相信大家都知道U盘有一个自动播放的功能,一插入电脑它就自动运行某个程序,本来这个功能是为了大家能更方便的使用U盘,但是由于这个功能经常被病毒利用,所以现在很多杀毒软件检查到AUTORUN.INF文件就 ...

  2. 开机自动播放视频,开机就自动播放视频,开机自动播放u盘视频

    因客户要求,开机自动播放视频,不需要电脑控制,通电自动循环播放视频. 电脑成本太高,最少也要800元,个头太大,解码也不是太好,控制不太方便, 于是就给客户推荐了一个'企鹅安卓机顶盒',个头小,解码速 ...

  3. Android自动播放U盘视频

    在网上看到很多类似的Demo,我刚入行很多都看不懂,最后自己弄出来这个,可以自动播放视频,但是只能播放名字为"video.mp4"的视频,也是得先打开Apk再插入U盘才能跳转播放, ...

  4. Android拷贝U盘中的文件到指定目录,拷贝完成后自动播放MP4文件

    先要监听到U盘插入的广播并获取U盘的文件路径,一般使用动态注册. UsbStateReceiver receiver = new UsbStateReceiver(); //new一个广播接收器Int ...

  5. 安卓开发,拼接屏幕、大屏幕、户外广告无人值守循环播放视频,图片。开机自动播放,断电后自动播放,重起后自动播放功能

    安卓开发,拼接屏幕.大屏幕.户外广告无人值守循环播放视频,图片.开机自动播放,断电后自动播放,重起后自动播放功能 因客户要求,开机自动播放视频,不需要电脑控制,通电自动循环播放视频. 电脑成本太高,最 ...

  6. Android 系统(169)---Android 7.0 插卡后APN信息的加载流程

    Android 7.0 插卡后APN信息的加载流程.UI界面编辑APN的流程及Android中APN配置相关的漏洞 终端中有一个apns-config.xml文件,负责定义各个运营商规定的默认APN参 ...

  7. 一个可以开机后自动和你打招呼的小程序(希望以后可以成为智能的系统)

    这是一个可以开机后自动和你打招呼的小程序,至于你的名字在配置文件中.这里主要是应用了微软的speech技术来播放声音.所以如果你有其他的需求可以自己扩展.这里我只是写了很少的一部分功能,以后有新的想法 ...

  8. android 开机动画竖屏,Android 5.0 开机横屏修改方法

    如果理解了Android的设计的原理, 其实这个修改原理十分简单, 比一些网上流出来的粗暴的修改方式既美观又实用. 修改分为三部分: 1: 上层(Java)修改 既然设计到屏幕的修改, 肯定想到了直接 ...

  9. html视频播放完自动跳转,在html5视频中跳转到currentTime后自动播放

    我试图创建一个视频,该视频在点击按钮后跳转到视频后从视频中的某个点自动播放.我拥有它,以便视频跳到现场,但我无法弄清楚如何从那里自动播放.我是新来的JavaScript,我想可能有一个简单的解决方案, ...

最新文章

  1. 用svg实现一个环形进度条
  2. ValueError: Shape mismatch: The shape of labels (received (768,)) should equal the shape of logits e
  3. matlab三角定位分析程序,Matlab chi2gof 分布分析程序求教
  4. Codeforces Round #737 (Div. 2) D. Ezzat and Grid 线段树动态开点
  5. emmet使用(HTML)
  6. Go 语言设计与实现纸质书出版,为信仰补票
  7. Python2+Selenium入门04-关于WebDriver类
  8. fenby C语言 P17
  9. 4.软件架构设计:大型网站技术架构与业务架构融合之道 --- 操作系统
  10. Java实例分析:宠物商店
  11. Keil MDK4及MDK5的下载及注册 STM32F10x 标准外设库的下载
  12. MSP430项目设计:2020年TI杯大学生电子设计竞赛 坡道行驶电动小车(C题)循迹小车(分享项目展示视频与源码)
  13. 计算机主板大小性能区别,电脑主板是大板好还是小板好 主板中大板和小板的区别介绍...
  14. 瑞萨e2studio(6)----编译调试
  15. 数学建模复习——代码记录
  16. 林轩田机器学习 | 机器学习技法课程笔记10 --- Random Forest
  17. Java 多文件压缩为ZIP
  18. python获取人民币汇率数据
  19. 什么是内网/局域网,局域网管控软件有什么用...
  20. 数据硬件容错服务器,容错服务器和普通服务器的区别

热门文章

  1. 用pymysql批量导入数据
  2. java中的BIO基础-4
  3. 广东中考数学不允许使用计算机,上070821对苏州市数学中考两次禁用计算器的反思终稿.doc...
  4. CCTV[经济半小时]2009民生报告:安身立业
  5. Unity3D 5 官方教程:粒子系统 How-Tos
  6. echarts雷达图文字不显示_ECharts雷达图指示器名称的设置
  7. 计算机思维与应用论文,计算机思维论文参考文献 计算机思维核心期刊参考文献哪里找...
  8. 【jQuery】学习一下JS库——jQuery
  9. 手机防盗版本修改步骤
  10. QML < 5 > QML 访问C++ 类 (函数Q_INVOKABLE、枚举Q_ENUMS 、成员变量Q_PROPERTY、自定义结构体QVariantMap、List数据QVariantL