2024年Android最全Android 多媒体MediaPlayer使用详解(1),2024年最新面试考哪些

最后

目前已经更新的部分资料:



网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

**例如:mp.setDataSource(“/sdcard/test.mp3”);

**c. 网络上的媒体文件

**例如:mp.setDataSource(“http://www.citynorth.cn/music/confucius.mp3”);

**MediaPlayer的setDataSource一共四个方法:

**setDataSource (String path)

setDataSource (FileDescriptor fd)

setDataSource (Context context, Uri uri)

setDataSource (FileDescriptor fd, long offset, long length)

其中使用FileDescriptor时,需要将文件放到与res文件夹平级的assets文件夹里,然后使用:

AssetFileDescriptor fileDescriptor = getAssets().openFd(“rain.mp3”);

m_mediaPlayer.setDataSource(fileDescriptor.getFileDescriptor(),fileDescriptor.getStartOffset(), fileDescriptor.getLength());

来设置datasource

先简单看下效果图吧

上面的功能一看就知道了,就不用我说了吧

下面是实现代码

activity_main.xml

<LinearLayout xmlns:android=“http://schemas.android.com/apk/res/android”

android:layout_width=“match_parent”

android:layout_height=“match_parent”

android:layout_margin=“3dp”

android:orientation=“vertical” >

<LinearLayout

android:layout_width=“match_parent”

android:layout_height=“wrap_content”

android:orientation=“horizontal” >

<Button

android:id=“@+id/play”

android:layout_width=“0dp”

android:layout_height=“wrap_content”

android:layout_weight=“1”

android:text=“播放” />

<Button

android:id=“@+id/pause”

android:layout_width=“0dp”

android:layout_height=“wrap_content”

android:layout_weight=“1”

android:text=“暂停” />

<Button

android:id=“@+id/stop”

android:layout_width=“0dp”

android:layout_height=“wrap_content”

android:layout_weight=“1”

android:text=“停止” />

<SeekBar

android:id=“@+id/seekbar”

android:layout_width=“match_parent”

android:layout_height=“wrap_content”

android:max=“0”

android:progress=“0”

android:secondaryProgress=“0” />

<RelativeLayout

android:layout_width=“match_parent”

android:layout_height=“wrap_content” >

<TextView

android:id=“@+id/tv”

android:layout_width=“wrap_content”

android:layout_height=“wrap_content”

android:layout_alignParentLeft=“true”

android:text=“当前时间” />

<TextView

android:id=“@+id/tv2”

android:layout_width=“wrap_content”

android:layout_height=“wrap_content”

android:layout_alignParentRight=“true”

android:text=“总时间” />

MainActivity.java

package com.example.musicplayer;

import java.io.File;

import java.io.IOException;

import android.R.integer;

import android.app.Activity;

import android.media.MediaPlayer;

import android.os.Bundle;

import android.os.Environment;

import android.os.Handler;

import android.os.Message;

import android.util.Log;

import android.view.Menu;

import android.view.MenuItem;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.Button;

import android.widget.SeekBar;

import android.widget.SeekBar.OnSeekBarChangeListener;

import android.widget.TextView;

public class MainActivity extends Activity implements OnClickListener,

OnSeekBarChangeListener {

private Button play, pause, stop;

private MediaPlayer player;

private SeekBar mSeekBar;

private TextView tv, tv2;

private boolean hadDestroy = false;

private Handler mHandler = new Handler() {

public void handleMessage(android.os.Message msg) {

switch (msg.what) {

case 0x01:

break;

default:

break;

}

};

};

Runnable runnable = new Runnable() {

@Override

public void run() {

if (!hadDestroy) {

mHandler.postDelayed(this, 1000);

int currentTime = Math

.round(player.getCurrentPosition() / 1000);

String currentStr = String.format(“%s%02d:%02d”, "当前时间 ",

currentTime / 60, currentTime % 60);

tv.setText(currentStr);

mSeekBar.setProgress(player.getCurrentPosition());

}

}

};

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

play = (Button) findViewById(R.id.play);

pause = (Button) findViewById(R.id.pause);

stop = (Button) findViewById(R.id.stop);

mSeekBar = (SeekBar) findViewById(R.id.seekbar);

tv = (TextView) findViewById(R.id.tv);

tv2 = (TextView) findViewById(R.id.tv2);

mSeekBar.setOnSeekBarChangeListener(this);

play.setOnClickListener(this);

pause.setOnClickListener(this);

stop.setOnClickListener(this);

player = new MediaPlayer();

initMediaplayer();

}

/**

  • 初始化播放器

*/

private void initMediaplayer() {

try {

File file = new File(Environment.getExternalStorageDirectory()

  • “/Download/”, “aiqiu.mp3”);

player.setDataSource(file.getPath());

Log.e(“播放器”, file.toString());

player.prepare();

} catch (Exception e) {

e.printStackTrace();

}

}

@Override

public void onClick(View v) {

switch (v.getId()) {

case R.id.play:

if (!player.isPlaying()) {

player.start();

int totalTime = Math.round(player.getDuration() / 1000);

String str = String.format(“%02d:%02d”, totalTime / 60,

totalTime % 60);

tv2.setText(str);

mSeekBar.setMax(player.getDuration());

mHandler.postDelayed(runnable, 1000);

}

break;

case R.id.pause:

if (player.isPlaying()) {

player.pause();

}

break;

case R.id.stop:

if (player.isPlaying()) {

player.reset();

initMediaplayer();

}

break;

default:

break;

}

}

@Override

public void onProgressChanged(SeekBar seekBar, int progress,

boolean fromUser) {

if (player != null) {

player.seekTo(seekBar.getProgress());

}

}

@Override

public void onStartTrackingTouch(SeekBar seekBar) {

// TODO 自动生成的方法存根

}

结语

看到这篇文章的人不知道有多少是和我一样的Android程序员。

35岁,这是我们这个行业普遍的失业高发阶段,这种情况下如果还不提升自己的技能,进阶发展,我想,很可能就是本行业的职业生涯的终点了。

我们要有危机意识,切莫等到一切都成定局时才开始追悔莫及。只要有规划的,有系统地学习,进阶提升自己并不难,给自己多充一点电,你才能走的更远。

千里之行始于足下。这是上小学时,那种一元钱一个的日记本上每一页下面都印刷有的一句话,当时只觉得这句话很短,后来渐渐长大才慢慢明白这句话的真正的含义。

有了学习的想法就赶快行动起来吧,不要被其他的事情牵绊住了前行的脚步。不要等到裁员时才开始担忧,不要等到面试前一晚才开始紧张,不要等到35岁甚至更晚才开始想起来要学习要进阶。

给大家一份系统的Android学习进阶资料,希望这份资料可以给大家提供帮助。

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

千里之行始于足下。这是上小学时,那种一元钱一个的日记本上每一页下面都印刷有的一句话,当时只觉得这句话很短,后来渐渐长大才慢慢明白这句话的真正的含义。

有了学习的想法就赶快行动起来吧,不要被其他的事情牵绊住了前行的脚步。不要等到裁员时才开始担忧,不要等到面试前一晚才开始紧张,不要等到35岁甚至更晚才开始想起来要学习要进阶。

给大家一份系统的Android学习进阶资料,希望这份资料可以给大家提供帮助。
[外链图片转存中…(img-sR1A2vAB-1715605595194)]

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值