1. 程式人生 > >Android開機啟動自動播放視訊

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, "onplaying==" + 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 !");
        }
    }
}

相關推薦

Android開機啟動自動播放視訊

最近客戶有個小需求:在一個android系統平臺上一開機就自動播放SD卡某檔案目錄下的視訊檔案。 需求比較簡單,不多說了,直接貼程式碼: 1 首先配置 AndroidManifest.xml  註冊一個開機服務廣播 主要程式碼如下:         <receiver android:name=".Bo

Html5 在 Android/IOS 瀏覽器不自動播放視訊

相信很多Web前端開發小夥伴因為工作的需求,在研究怎麼通過HTML5實現視訊在手機瀏覽器的自動播放(主流瀏覽器)。在這裡,我要告訴大家: Chrome for Android 從版本54開始支援靜音

Android仿微博/QQ空間滑動自動播放視訊功能

最近做專案用到了滑動自動播放,下面是原理大家借鑑一下: 關鍵程式碼 1.監聽滾動事件 首先要給listview新增setOnScrollListener監聽,注意這個監聽在recyclerView上是addOnScrollListener,也就是說下面

Android開機啟動

sys ttext system 權限 cast cas n) gif complete 使用Android Studio幫我們創建廣播,點擊包名-->New-->BroadcastReceiver 在清單文件中會自動生成 我們加上開機廣播的action

linux開機啟動自動執行某個指令碼

有時候我們需要在開機的拉起一個服務或程序。 比較方便的改法是在檔案/etc/rc.local,編輯這個檔案,在末尾新增 source 指令碼名稱.sh 指令碼run_httpd_server.sh的內容 #!/bin/bash export BASE_DIR=$(p

Android使用MediaPlayer只播放視訊播放音訊的方法

今天寫專案時,突然遇到一個麻煩的問題,就是使用mediaplayer播放MP4檔案時,只需要播放他的視訊畫面就好了,而不用去播放他的聲音,需求很怪,嘗試了mediaplayer的各種方法也沒有解決,後來想了一個取巧的方法。 通過設定mediaplayer.setAudioStreamType

imx6 android開機啟動守護程序

由於專案中需用到自己的編寫的兩個底層命令列程式,並且讓系統開機就自啟動這兩個程式。 我把這兩個程式寫成了守護程序。並自一個shell指令碼中執行啟動這兩個程式的命令,這樣,我設定adroid開機啟動的時候就只有啟動這個指令碼就行了。 做好以上兩點,接下來就是新增相應的拷貝動

android開機啟動流程簡單分析

android啟動 當載入程式啟動Linux核心後,會載入各種驅動和資料結構,當有了驅動以後,開始啟動Android系統同時會載入使用者級別的第一個程序init(system\core\init\init.cpp)程式碼如下: int main(int ar

Android解決Mediaplayer+SurfaceView播放視訊中的若干BUG

        專案的功能很簡單,單純的播放視訊,沒有進度條,暫停鍵等,只有一個關閉按鈕,當播放視訊時切換到後臺暫停播放,恢復到前臺後接著原來的進度播放。         1.用MediaPlayer播放視訊,呼叫MediaPlayer.start(),surfaceHol

Android 開機啟動除錯,system_process除錯

下載,編譯,匯入,配置 作為開發者,經常會對Debug工程進行除錯,Android具有debug簽名的應用才可以被除錯,如果想除錯系統原始碼呢? 想要除錯原始碼,首先必須要有原始碼,並且保證裝置執行的原始碼和IED裡的原始碼是同一份. 下載和編譯AOSP原始碼,本人使用

Android Vitamio整合_播放視訊_At_Swim

我相信當你看到這篇部落格的時候也遇到跟我一樣的問題 1.下載完VitamioSDK導不進自己的Studio 2.匯入到自己的Studio反而會報錯 廢話不多說我們看步驟 步驟一        點開連結 點選開啟連結下

Android邊緩衝邊播放視訊(ijkplayer的編譯和使用)

當你看到這篇博文的時候希望你先對這個開源專案有所瞭解。 github上的地址: https://github.com/Bilibili/ijkplayer 感謝嗶哩嗶哩團隊不吝開放出來。此文主要用於幫助之後需要編譯ijkplayer的同學,少走一點彎路。 轉載請註明出處:CSD

APP端webview自動播放視訊

昨天碰到一需求,需要寫一個html5頁面,要求支援開啟自動播放視訊。 ok,要支援自動播放,設定<video>的autoplay="autoplay"就可以了吧。 測試發現只有在瀏覽器中是正常播放了,android和ios都沒有播放。 換了種寫法: <b

Android之VideoView 進行播放視訊 (不更新)

Android自帶了VideoView 一個可以播放本地視訊和網路視訊的類 所以說許可權我們一定不要忘記新增 <uses-permission android:name="android.permission.INTERNET"></uses-permi

Android開機啟動效能優化

Android 開機啟動速度優化 一 在開機啟動中,可以藉助bootchart 工具分析android的啟動過程。bootchart是一個用於linux啟動過程效能分析的開源軟體工具,在系統啟動過程自動收集CPU佔用率、程序等資訊,並以圖形方式顯示分析結果,可用作指導優化系統啟動過程。 1、UBu

Android開機啟動耗時較多的部分有3個,分別是preloadclasses和scan packages。//preload-resources

Android開機啟動耗時較多的部分有2個,分別是preloadclasses和scan packages。 這裡又數preloadclasses最為耗時,在我的機子上一般需要13秒左右。關於preloadclasses的優化,可以參見http://www.eoean

關於Android 電視 viedo 自動播放

由於公司需要在門店的電視上面展示公司的宣傳視訊,於是就叫我寫了個頁面。 我靠 當時一想挺簡單的  ,不就是  video 再弄個 autoplay嘛,在電視上面調得好好的。頁面展示完了 進視訊  視訊完了進頁面,結果弄到手機上面那麼一測   我靠就出問題了,視訊必須要點選才

簡述Android中如何實現播放視訊形式的引導頁面

以前呢好多應用的引導介面大多都是ViewPager輪播等,現在好多應用為了實現炫酷的引導介面都使用了播放一個炫酷的視訊來作為引導介面,而這種炫酷的方法還比較省事兒,下面我寫一下怎麼去實現,而且是非常非常簡單的就可以達到效果。  好,首先在專案中自定義一個videoview

小程式點選圖片自動播放視訊,停止上一個視訊播放

通過列表的點選事件自動播放列表對應的視訊,同時停止上一個視訊的播放 原始碼: <view> <view class='vv' wx:for='{{vedio_data}}' w

Android實現ViewPager滑動播放視訊,ViewPager+Fragment取消懶載入問題

1.首先: 設定ViewPager的verticalViewPager.setOffscreenPageLimit(0),發現無效,但是原始碼中確實設定0之後預設的是0,然而你滑動的時候發現當前的視訊在播放而下一條也會播放。 2.解決 : public abstract