版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zhuxingchong/article/details/81539596
基于屏保实现的演示模式,在屏保实现循环播放视频功能,先设置屏保我们自己开发的屏保。
安装APK后在 设置 -》 显示-》屏保 -》当前的屏保
选择 视频演示模式
再将屏保启动时间改为 充电或插入基座时 -》点击 立即启动 或者手机连接USB,等手机自动灭屏就会开始播放
如果用户按了power key灭屏就不会进去演示模式。
AndroidManifest.xml文件
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.videoplay.demo">
<application
android:allowBackup="true"
android:supportsRtl="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<---最重要地方实现屏保类-->
<service
android:name="com.videoplay.demo.VideoDreamService"
android:exported="true"
android:label="视频演示模式"
android:icon="@drawable/ic_launcher"
android:screenOrientation="landscape"
android:permission="android.permission.BIND_DREAM_SERVICE">
<intent-filter>
<action android:name="android.service.dreams.DreamService"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</service>
</application>
</manifest>
布局文件 draem_video_play.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#0000">
<VideoView
android:id="@+id/video"
android:layout_width="wrap_content"
android:layout_gravity="center"
android:layout_alignParentLeft="true"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
android:layout_alignParentBottom="true"
android:layout_height="wrap_content"
/>
</RelativeLayout>
//最重要实现屏保类
package com.videoplay.demo;
import android.media.MediaPlayer;
import android.net.Uri;
import android.os.Build;
import android.os.Environment;
import android.service.dreams.DreamService;
import android.support.annotation.RequiresApi;
import android.view.View;
import android.widget.MediaController;
import android.widget.VideoView;
@RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN_MR1)
public class VideoDreamService extends DreamService {
@Override
public void onAttachedToWindow() {
super.onAttachedToWindow();
setInteractive(false);
setFullscreen(true);
setContentView(R.layout.draem_video_play);//设置屏保视图
addview();
}
public void addview(){
//String uri = "android.resource://" + getPackageName() + "/" + R.raw.video;
Uri uri = Uri.parse("android.resource://" + getPackageName() + "/" + R.raw.video);
/**
* 本地播放
*/
//videoView.setVideoPath(PATH);
/**
* 网络播放
*/
//videoView.setVideoURI(Uri.parse("http://cn-jsxz1-cu.acgvideo.com/vg2/e/b4/13382667-1.flv?expires=1485238800&ssig=Uq0E2CqgSGNjDKYJfTr5Kg&oi=2362377891&nfa=B2jsoD9cEoAmG7KPYo7s2g==&dynamic=1"));
VideoView videoView = (VideoView) findViewById(R.id.video);
videoView.setMediaController(new MediaController(this));
videoView.setVideoURI(uri);
//videoView.setVideoURI(Uri.parse("http://2449.vod.myqcloud.com/2449_22ca37a6ea9011e5acaaf51d105342e3.f20.mp4"));
videoView.start();
videoView.requestFocus();
//监听视频播放完的代码,实现循环播放功能
videoView.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mPlayer) {
// TODO Auto-generated method stub
mPlayer.start();
mPlayer.setLooping(true);
}
});
hideBottomUIMenu();
}
/**
* 隐藏虚拟按键,并且全屏
*/
protected void hideBottomUIMenu() {
//隐藏虚拟按键,并且全屏
if (Build.VERSION.SDK_INT > 11 && Build.VERSION.SDK_INT < 19) { // lower api
View v = this.getWindow().getDecorView();
v.setSystemUiVisibility(View.GONE);
} else if (Build.VERSION.SDK_INT >= 19) {
//for new api versions.
View decorView = getWindow().getDecorView();
int uiOptions = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY | View.SYSTEM_UI_FLAG_FULLSCREEN;
decorView.setSystemUiVisibility(uiOptions);
}
}
@Override
public void onCreate() {
super.onCreate();
}
@Override
public void onDetachedFromWindow() {
super.onDetachedFromWindow();
System.exit(0);
android.os.Process.killProcess(android.os.Process.myPid());
}
@Override
public void onDreamingStarted() {
super.onDreamingStarted();
}
}