進公司的第16天 2020/4/7 隨便寫點

一覺起來。8:10。臥槽,要遲到了,趕緊從牀上爬起來急急忙忙洗漱開溜。叮叮叮叮。一看時間距離上班還有分鐘。公司打卡範圍廣就是好啊。
打開筆記本。以及我的兩臺顯示器。如果你要問每天工作對着三個顯示器有什麼想法。。我只想說有點眼花。
未完成任務:將雙屏中的副屏視頻播放放入後臺。
我昨天終於放棄了掙扎跟老大說了我搞不定。老大表示意料之中。讓我在熟悉熟悉代碼。說是後面會和我一起調。當然我也不敢問後面是多久。

在這裏插入圖片描述
繼續熟悉代碼調試。看能不能瞎吉兒調成功。不過我好像也不屬於歐洲人。調了一上午都沒調成功。不過有個事我真的不能忍了。越看越氣。
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
還有類似的我就不一一舉例了。這個判斷是怎麼回事!!!!爲什麼你給了設了初始值又沒有改變他。你爲啥還不停的做判斷?萌新表示理解不了。這種毫無意義的代碼看着真的好氣人。浪費我的心力。也沒寫什麼註釋 。不過我也不敢全部刪掉。說不定有用呢。emmmmmm
到了下午我覺得我不能在這麼下去了。這麼瞎幾把調下去是沒有任何結果的。我決定先做一個小Demo。

MediaPlayer+SurfaceView+Presentation雙屏+Service後臺播放

第一步:創建新的Demo,註冊Activity和Service
第二步:MainAcitivity

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        TextView textView = (TextView) findViewById(R.id.test);
        textView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                openWithHomePageUri("xxxxxx");
            }
        });
        startService(new Intent(this, MyService.class));
    }
    private void handleIntent(Intent intent) {
        intent.setAction("xxxxxxxxxx");
        intent.setPackage("xxxxxxxxxx");//設置視頻包名,要先確認包名
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        PackageManager packageManager = getPackageManager();
        List<ResolveInfo> activities = packageManager
                .queryIntentActivities(intent, 0);
        Log.e("WWW",activities.size()+"");
        boolean isIntentSafe = activities.size() > 0;
        if (isIntentSafe) {
            startActivity(intent);
        } else {
            Toast.makeText(getApplicationContext(), "未安裝騰訊視頻 , 無法跳轉", Toast.LENGTH_SHORT).show();
        }
    }
    private void openWithHomePageUri(String uri) {
        Intent intent = new Intent();
        intent.setData(Uri.parse(uri));
        handleIntent(intent);
    }

}

第三步:MyService

public class MyService extends Service implements DialogInterface.OnDismissListener {

    private DisplayManager mDisplayManager;
    private String TAG = "MyService";
    private MyPresentation myPresentation;

    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }

    @Override
    public void onCreate() {
        super.onCreate();
        mDisplayManager = (DisplayManager) getSystemService(Context.DISPLAY_SERVICE);
        Display[] displays = mDisplayManager.getDisplays();
        Log.v(TAG,"displays.length = " + displays.length);
        Log.v(TAG,"displays[0].getName() = " + displays[0].getName());
        if(displays.length > 1)
        {
            Log.v(TAG,"displays[1].getName() = " + displays[1].getName());
        }
        if (myPresentation == null && displays.length > 1) {
            myPresentation = new MyPresentation(getApplicationContext(), displays[displays.length - 1]);
            myPresentation.setOnDismissListener(this);
            myPresentation.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
            //myPresentation.getWindow().setType(WindowManager.LayoutParams.TYPE_PHONE);
            myPresentation.getWindow().setFlags(WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED,
                    WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED);
            myPresentation.show();
        }
    }

    @Override
    public void onDismiss(DialogInterface dialog) {

    }
}

第四步:Presentation,請注意此處url資源路徑我是定死的

public class MyPresentation extends Presentation {
    
    public MyPresentation(Context outerContext, Display display) {
        super(outerContext, display);
    }

    public MyPresentation(Context outerContext, Display display, int theme) {
        super(outerContext, display, theme);
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.presentation_layout);
        final MediaPlayer player = new MediaPlayer();
        String dataPath = "/mnt/link2src/sys_file/media/default.mpg";
        try {
            player.setDataSource(dataPath);
        } catch (Exception e) {
            e.printStackTrace();
        }
        player.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
            @Override
            public void onPrepared(MediaPlayer mp) {
                player.start();
            }
        });
        SurfaceView surfaceView = (SurfaceView)this.findViewById(R.id.suf);
        surfaceView.getHolder().addCallback(new SurfaceHolder.Callback() {
            @Override
            public void surfaceCreated(SurfaceHolder holder) {
                //將播放器和SurfaceView關聯起來
                player.setDisplay(holder);

                //異步緩衝當前視頻文件,也有一個同步接口
                player.prepareAsync();
            }
            @Override
            public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
            }
            @Override
            public void surfaceDestroyed(SurfaceHolder holder) {

            }
        });
    }
}

實驗結果表明我老大的想法是沒有問題。既然音頻能夠後臺播放視頻應該也是可以的。
Demo主屏顯示視頻。副屏顯示主屏內容。我感覺好像顯示內容主副屏顛倒了。但是我點擊成功跳轉之後。視頻的播放沒有受到任何影響。這個目標是我想要實現的。至於內容爲什麼顛倒了。我明天在改改看看。快20:30了。寫完博客溜了。
還有如果有人想拿這些代碼試試的話請注意Presentation的權限問題。因爲我是直接在luncher裏測試擁有系統APP的權限,所以不用管。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章