Activity的生命週期: 播放音樂與影片 靜宜大學資管系 楊子青
1.用MediaPlayer播放音樂
MediaPlayer的3個監聽事件
處理在播放音樂時切換到其他程式的狀況
2.建立Media專案,播放聲音檔 選擇Bottom Navigation Activity 開啟res/menu/navigation.xml,按Text 3個item的android:title= 分別設為:歡迎修課, 展翅飛翔,Love MainActivity.java的3個選項之mTextMessage.setText也設為上述三個文字 在res資料夾,新增raw資料夾,放入tcyang.aac, fly.aac及love.mp4
執行看看
MainActivity.java public class MainActivity extends AppCompatActivity{ private TextView mTextMessage; MediaPlayer mper; @Override protected void onCreate(Bundle savedInstanceState) { … //隱藏狀態列 getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); //不要自動休眠 getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); //設定螢幕水平顯示 setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); }
執行看看
MainActivity.java private BottomNavigationView.OnNavigationItemSelectedListener mOnNavigationItemSelectedListener = new BottomNavigationView.OnNavigationItemSelectedListener() { @Override public boolean onNavigationItemSelected(@NonNull MenuItem item) { switch (item.getItemId()) { case R.id.navigation_home: mTextMessage.setText("歡迎修課"); mper = MediaPlayer.create(getApplicationContext(), R.raw.tcyang); mper.start(); return true; 由於是寫在監聽事件裡 此處不能用this
MainActivity.java 可以執行看看 case R.id.navigation_dashboard: mTextMessage.setText("展翅飛翔"); mper = MediaPlayer.create(getApplicationContext(), R.raw.fly); mper.start(); return true; 可以執行看看
改善:切換其他音檔,重新設定 case R.id.navigation_home: mTextMessage.setText("歡迎修課"); if (mper != null){ mper.reset(); } mper = MediaPlayer.create(getApplicationContext(), R.raw.tcyang); mper.start(); return true; case R.id.navigation_dashboard: mTextMessage.setText("展翅飛翔"); mper = MediaPlayer.create(getApplicationContext(), R.raw.fly);
改善:切換至其他應用程式再切回 需安裝到行動裝置或模擬器,再進行測試 @Override public void onPause() { super.onPause(); if(mper != null && mper.isPlaying()) mper.pause(); } @Override public void onResume(){ super.onResume(); if(mper != null) { mper.start(); } @Override public void onDestroy() { super.onDestroy(); if(mper != null) { mper.release(); } 需安裝到行動裝置或模擬器,再進行測試
3.用VideoView播放影片
用程式控制 VideoView 的影片播放
處理在播放影片時切換到其他程式的狀況
4.繼續Media專案,播放影片檔 Activity_main.xml版面配置,加入VideoView id設為 @+id/vdv
MainActivity.java public class MainActivity extends AppCompatActivity { … VideoView vdv; android.widget.MediaController vidControl;
MainActivity.java @Override protected void onCreate(Bundle savedInstanceState) { … vdv = (VideoView) findViewById(R.id.vdv); vidControl = new android.widget.MediaController(this); vdv.setMediaController(vidControl); }
MainActivity.java public boolean onNavigationItemSelected(@NonNull MenuItem item) { switch (item.getItemId()) { … case R.id.navigation_notifications: mTextMessage.setText("Love"); vdv.setVideoURI(Uri.parse("android.resource://" + getPackageName() + "/" + R.raw.love)); vdv.start(); return true; } return false;
補充