日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

扣丁学堂笔记第22天多媒体播放

發(fā)布時(shí)間:2024/1/1 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 扣丁学堂笔记第22天多媒体播放 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1.簡(jiǎn)單介紹與播放三種媒體源

MainActivity

package com.example.mediaplayertest;import java.io.IOException;import android.app.Activity; import android.media.MediaPlayer; import android.media.MediaPlayer.OnPreparedListener; import android.net.Uri; import android.os.Bundle; import android.os.Environment; import android.view.Menu; import android.view.MenuItem; import android.view.View;public class MainActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);}public void playResClick(View view) {// MediaPlayer mp = MediaPlayer.create(this, R.raw.a1);// mp.start();}public void playSysClick(View view) {MediaPlayer mp = new MediaPlayer();String path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MUSIC)+ "/a2.mp3";try {mp.setDataSource(this, Uri.parse(path));mp.prepare();// 同步運(yùn)行mp.start();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}public void playNetClick(View view) {// 音樂(lè)鏈接要保證有效String path = "http://y.qq.com/index.html#type=song&mid=0040E7kG0ZJ9al&tpl=yqq_song_detail";MediaPlayer mp = new MediaPlayer();try {mp.setDataSource(this, Uri.parse(path));mp.setOnPreparedListener(new OnPreparedListener() {@Overridepublic void onPrepared(MediaPlayer mp) {// TODO Auto-generated method stubmp.start();}});mp.prepareAsync();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}} }
activtiy_main

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:paddingBottom="@dimen/activity_vertical_margin"android:paddingLeft="@dimen/activity_horizontal_margin"android:paddingRight="@dimen/activity_horizontal_margin"android:paddingTop="@dimen/activity_vertical_margin"tools:context="com.example.mediaplayertest.MainActivity" ><Buttonandroid:id="@+id/button1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignParentLeft="true"android:layout_alignParentRight="true"android:layout_alignParentTop="true"android:text="播放本地文件"android:onClick="playResClick" /><Buttonandroid:id="@+id/button2"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignParentLeft="true"android:layout_alignRight="@+id/button1"android:layout_below="@+id/button1"android:text="播放系統(tǒng)文件" android:onClick="playSysClick"/><Buttonandroid:id="@+id/button3"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignLeft="@+id/button2"android:layout_alignRight="@+id/button2"android:layout_below="@+id/button2"android:text="播放網(wǎng)絡(luò)文件"android:onClick="playNetClick" /></RelativeLayout>
AndroidManifest


<uses-permission android:name="android.permission.INTERNET"/>

2.MediaPlayer狀態(tài)分析


3.簡(jiǎn)單的播放器實(shí)現(xiàn)案例

MainActivity

package com.example.simpleplayertest;import java.io.File; import java.io.IOException; import java.util.ArrayList;import android.app.Activity; import android.media.MediaPlayer; import android.media.MediaPlayer.OnCompletionListener; import android.media.MediaPlayer.OnErrorListener; import android.media.MediaPlayer.OnPreparedListener; import android.os.Bundle; import android.os.Environment; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button;public class MainActivity extends Activity implements OnClickListener,OnPreparedListener, OnErrorListener, OnCompletionListener {private MediaPlayer player;private int index = 0;//表示當(dāng)前要播放的音樂(lè)的索引private ArrayList<String> musicList = new ArrayList<String>();private Button btn_play, btn_pause, btn_last, btn_next;private boolean isPause = false;//true表示暫停狀態(tài)@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);initView();initMusic();player = new MediaPlayer();player.setOnPreparedListener(this);player.setOnErrorListener(this);player.setOnCompletionListener(this);}private void initView() {// TODO Auto-generated method stubbtn_play = (Button) findViewById(R.id.btn_play);btn_pause = (Button) findViewById(R.id.btn_pause);btn_last = (Button) findViewById(R.id.btn_last);btn_next = (Button) findViewById(R.id.btn_next);btn_play.setOnClickListener(this);btn_pause.setOnClickListener(this);btn_last.setOnClickListener(this);btn_next.setOnClickListener(this);}private void initMusic() {String root = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MUSIC).getPath();musicList.add(root + File.separator + "a.mp3");musicList.add(root + File.separator + "b.mp3");musicList.add(root + File.separator + "c.mp3");musicList.add(root + File.separator + "d.mp3");}@Overrideprotected void onDestroy() {// TODO Auto-generated method stubsuper.onDestroy();if(player!=null){if(player.isPlaying()){player.stop();}player.release();}}@Overridepublic void onCompletion(MediaPlayer mp) {// TODO Auto-generated method stubnext();}@Overridepublic boolean onError(MediaPlayer mp, int what, int extra) {// TODO Auto-generated method stubplayer.reset();return true;}@Overridepublic void onPrepared(MediaPlayer mp) {// TODO Auto-generated method stubmp.start();}@Overridepublic void onClick(View v) {// TODO Auto-generated method stubswitch (v.getId()) {case R.id.btn_play:play();break;case R.id.btn_pause:pause();break;case R.id.btn_last:last();break;case R.id.btn_next:next();break;default:break;}}private void next() {// TODO Auto-generated method stubif(index+1<musicList.size()-1){index++;}else{index = 0;}start();}private void last() {// TODO Auto-generated method stubif(index-1>=0){index--;}else{index = musicList.size()-1;}start();}//暫停private void pause() {// TODO Auto-generated method stubif(player.isPlaying()){player.pause();isPause = true;}}private void play() {// TODO Auto-generated method stubif(isPause){player.start();//接著播放(不是從頭開(kāi)始)isPause = false;}else{start();//音樂(lè)從頭開(kāi)始播放的方法}}//音樂(lè)從頭開(kāi)始播放的方法private void start() {// TODO Auto-generated method stubif(index<musicList.size()){if(player.isPlaying()){player.stop();}player.reset();String musicPath = musicList.get(index);try {player.setDataSource(musicPath);player.prepareAsync();//之后調(diào)用onPrepared方法isPause = false;}catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}} }


activity_main

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:paddingBottom="@dimen/activity_vertical_margin"android:paddingLeft="@dimen/activity_horizontal_margin"android:paddingRight="@dimen/activity_horizontal_margin"android:paddingTop="@dimen/activity_vertical_margin"tools:context="com.example.simpleplayertest.MainActivity" ><ImageViewandroid:id="@+id/imageView1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_centerHorizontal="true"android:layout_centerVertical="true"android:src="@drawable/ic_launcher" /><LinearLayoutandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_below="@+id/imageView1"android:orientation="horizontal" ><Buttonandroid:id="@+id/btn_last"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="上一首"android:layout_weight="1" /><Buttonandroid:id="@+id/btn_play"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignBottom="@+id/button1"android:layout_toRightOf="@+id/button1"android:text="播放" android:layout_weight="1"/><Buttonandroid:id="@+id/btn_pause"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignBaseline="@+id/button2"android:layout_alignBottom="@+id/button2"android:layout_toRightOf="@+id/button2"android:text="暫停" android:layout_weight="1"/><Buttonandroid:id="@+id/btn_next"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignBaseline="@+id/button3"android:layout_alignBottom="@+id/button3"android:layout_alignParentRight="true"android:text="下一首" android:layout_weight="1"/></LinearLayout></RelativeLayout>

4.在服務(wù)中使用MediaPlayer


5.作為前臺(tái)服務(wù)執(zhí)行

在服務(wù)中使用mediaplayer+作為前臺(tái)服務(wù)執(zhí)行代碼

MyService.java

package com.example.servicemediaplayertest;import java.io.File; import java.io.IOException;import android.app.Notification; import android.app.NotificationManager; import android.app.PendingIntent; import android.app.Service; import android.app.Notification.Builder; import android.content.Context; import android.content.Intent; import android.media.MediaPlayer; import android.media.MediaPlayer.OnPreparedListener; import android.net.wifi.WifiManager; import android.os.Environment; import android.os.IBinder; import android.os.PowerManager;public class MyService extends Service implements OnPreparedListener{public static final String ACTION_PLAY = "com.example.servicemediaplayertest.ACTION_PLAY";public static final String ACTION_PAUSE = "com.example.servicemediaplayertest.ACTION_PAUSE";public static final String ACTION_EXIT = "com.example.servicemediaplayertest.ACTION_EXIT";private MediaPlayer player;private WifiManager.WifiLock lock;@Overridepublic void onCreate() {// TODO Auto-generated method stubsuper.onCreate();player = new MediaPlayer();//保持cpu正常工作player.setWakeMode(getApplicationContext(), PowerManager.PARTIAL_WAKE_LOCK);//保持wifi不被休眠WifiManager wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);lock = wifiManager.createWifiLock("myLock");lock.acquire();player.setOnPreparedListener(this);notification();}private void notification() {// TODO Auto-generated method stubNotification.Builder builder = new Builder(this);builder.setTicker("為她音悅");builder.setSmallIcon(R.drawable.ic_launcher);builder.setContentTitle("我的音樂(lè)播放器");builder.setContentInfo("正在播放");PendingIntent pi = PendingIntent.getActivity(this, 0, new Intent(this,MainActivity.class), PendingIntent.FLAG_UPDATE_CURRENT);builder.setContentIntent(pi);NotificationManager nm = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);Notification notification = builder.build();startForeground(0, notification);nm.notify(0,notification);}@Overridepublic int onStartCommand(Intent intent, int flags, int startId) {// TODO Auto-generated method stubString action = intent.getAction();if(ACTION_PLAY.equals(action)){player.reset();try {player.setDataSource(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MUSIC)+File.separator+"a.mp3");player.prepareAsync();}catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}else if(ACTION_PAUSE.equals(action)){if(player.isPlaying())player.pause();}else if(ACTION_EXIT.equals(action)){if(player.isPlaying())player.stop();player.release();}return super.onStartCommand(intent, flags, startId);}@Overridepublic void onDestroy() {// TODO Auto-generated method stubsuper.onDestroy();stopForeground(true);lock.release();}@Overridepublic IBinder onBind(Intent intent) {// TODO Auto-generated method stubreturn null;}@Overridepublic void onPrepared(MediaPlayer mp) {// TODO Auto-generated method stubmp.start();}}


MainActivity

package com.example.servicemediaplayertest;import android.app.Activity; import android.app.Notification; import android.app.Notification.Builder; import android.app.NotificationManager; import android.app.PendingIntent; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.view.KeyEvent; import android.view.View;public class MainActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);}// @Override // public boolean onKeyDown(int keyCode, KeyEvent event) { // // TODO Auto-generated method stub // if(keyCode==KeyEvent.KEYCODE_BACK){ // // } // return super.onKeyDown(keyCode, event); // }public void playClick(View view) {Intent intent = new Intent(MyService.ACTION_PLAY);startService(intent);}public void pauseClick(View view) {Intent intent = new Intent(MyService.ACTION_PAUSE);startService(intent);}public void exitClick(View view) {Intent intent = new Intent(MyService.ACTION_EXIT);startService(intent);} }


activity_main

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:paddingBottom="@dimen/activity_vertical_margin"android:paddingLeft="@dimen/activity_horizontal_margin"android:paddingRight="@dimen/activity_horizontal_margin"android:paddingTop="@dimen/activity_vertical_margin"tools:context="com.example.servicemediaplayertest.MainActivity" ><Buttonandroid:id="@+id/button1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignParentLeft="true"android:layout_alignParentTop="true"android:text="PLAY" android:onClick="playClick"/><Buttonandroid:id="@+id/button2"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignLeft="@+id/button1"android:layout_below="@+id/button1"android:text="PAUSE" android:onClick="pauseClick"/><Buttonandroid:id="@+id/button3"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignLeft="@+id/button2"android:layout_below="@+id/button2"android:text="EXIT" android:onClick="exitClick"/></RelativeLayout>


Androidmanifest

<uses-permission android:name="android.permission.WAKE_LOCK"/>
<service android:name=".MyService"android:process=":music"><intent-filter><action android:name="com.example.servicemediaplayertest.ACTION_PLAY"/><action android:name="com.example.servicemediaplayertest.ACTION_PAUSE"/><action android:name="com.example.servicemediaplayertest.ACTION_EXIT"/></intent-filter></service>

6.處理音頻焦點(diǎn)


7.ContentResolver獲取媒體信息


8.ContentResolver測(cè)試

轉(zhuǎn)載于:https://www.cnblogs.com/yxysuanfa/p/7241404.html

總結(jié)

以上是生活随笔為你收集整理的扣丁学堂笔记第22天多媒体播放的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。