Android开机启动自动播放视频

最近客户有个小需求:在一个android系统平台上一开机就自动播放SD卡某文件目录下的视频文件。
需求比较简单,不多说了,直接贴代码:
1 首先配置 AndroidManifest.xml  注册一个开机服务广播
主要代码如下:
        <receiver android:name=".BootBroadCastReceiver">
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </receiver>
权限:   
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>

2广播接受类:
public class BootBroadCastReceiver extends BroadcastReceiver {
    public static final String ACTION = "android.intent.action.BOOT_COMPLETED";

    @Override
    public void onReceive(Context context, Intent intent) {
        if (intent.getAction().equals(ACTION)) {
            Log.i("Videoplayer", "onReceive");
            Intent myintent = new Intent(context, Videoplayer.class);
            myintent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);//这个一定要加否则无法启动activity
            context.startActivity(myintent);
        }
    }
}

3 就是视频播放类了  Videoplayer.java
package cn.com.sy;

import java.io.File;
import java.io.FilenameFilter;
import java.util.List;

import android.app.Activity;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnCompletionListener;
import android.media.MediaPlayer.OnPreparedListener;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.view.SurfaceHolder.Callback;
import android.widget.EditText;
import android.widget.Toast;

public class Videoplayer extends Activity implements OnCompletionListener {
    public static final String TAG = "Videoplayer";

    private String path;
    private MediaPlayer mediaPlayer;
    private SurfaceView surfaceView;

    private File[] mVideoFiles;
    private int index = 0;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // 全屏显示
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                WindowManager.LayoutParams.FLAG_FULLSCREEN);
        setContentView(R.layout.main);
        // 播放器
        mediaPlayer = new MediaPlayer();
        // 每次播完后监听事件
        mediaPlayer.setOnCompletionListener(this);
        // 遍历SD卡下的视频文件
        /*
         * String url = Environment.getExternalStorageDirectory()
         * .getAbsolutePath() + File.separatorChar + "目录名";
         */
        String url = Environment.getExternalStorageDirectory()
                .getAbsolutePath();
        Log.i(TAG, url);
        getFiles(url);

        surfaceView = (SurfaceView) this.findViewById(R.id.surfaceView);
        // 把输送给surfaceView的视频画面,直接显示到屏幕上,不要维持它自身的缓冲区
        surfaceView.getHolder()
                .setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
        // 屏幕尺寸
        surfaceView.getHolder().setFixedSize(176, 144);
        // 保持屏幕唤醒状态
        surfaceView.getHolder().setKeepScreenOn(true);
        // 回调SurfaceViewCallback对象
        surfaceView.getHolder().addCallback(new SurfaceCallback());
    }

    private final class SurfaceCallback implements Callback {
        public void surfaceChanged(SurfaceHolder holder, int format, int width,
                int height) {
        }

        public void surfaceCreated(SurfaceHolder holder) {
            play();
        }

        public void surfaceDestroyed(SurfaceHolder holder) {
            onStop();
        }
    }

    @Override
    protected void onStop() {
        if (mediaPlayer != null) {
            if (mediaPlayer.isPlaying())
                mediaPlayer.stop();
        }
        releaseMediaPlayer();
        super.onStop();
    }

    @Override
    protected void onDestroy() {
        releaseMediaPlayer();
        super.onDestroy();
    }

    // 释放播放器资源
    private void releaseMediaPlayer() {
        if (mediaPlayer != null) {
            Log.i(TAG, "Release MediaPlayer");
            mediaPlayer.release();
            mediaPlayer = null;
        }
    }

    // 封装播放方法
    private void play() {
        if (mVideoFiles == null || mVideoFiles.length == 0) {
            Toast.makeText(this.getApplicationContext(), "No video files",
                    Toast.LENGTH_LONG).show();
            return;
        }
        try {
            path = mVideoFiles[index].getAbsolutePath();
            Log.i(TAG, "οnplaying==" + path);
            index++;
            if (index == mVideoFiles.length)
                index = 0;
            // 播放器重置
            mediaPlayer.reset();
            // 文件路径
            mediaPlayer.setDataSource(path);
            // 设置Video影片以SurfaceHolder播放
            mediaPlayer.setDisplay(surfaceView.getHolder());
            // 设置播放器播放数据流类型
            mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
            // 缓冲
            mediaPlayer.prepare();
            mediaPlayer.start();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    @Override
    public void onCompletion(MediaPlayer mp) {
        Log.i(TAG, "onCompletion");
        play();
    }

    // 遍历指定目录下的视频文件
    private void getFiles(String url) {
        try {
            File file = new File(url);
            mVideoFiles = file.listFiles(new FilenameFilter() {
                @Override
                public boolean accept(File dir, String name) {
                    return name.endsWith(".mp4") || name.endsWith(".3gp");
                }
            });
            Log.i("Videoplayer", "files.length==" + mVideoFiles.length);
        } catch (Exception e) {
            Log.i("Videoplayer", "not find file !");
        }
    }
}

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值