Android之MediaPlayer(两种)基本使用方式

Android中的MediaPlayer的使用详解 今天本文介绍的是Andriod系统自带的Mediaplayer,和VideoView实现简单的音乐和视频的播放,至于想做出如酷狗音乐这样的APP的话,只要想做,应该也不难,都是基于此实现了功能的扩展。 Android的MediaPlayer包含了Audio和Video的播放功能,在Android的界面上,Music和Video两个应用程序都是调用MediaPlayer来实现的。 一、播放音频文件 首先看看MediaPlaer的生命周期 下面是MediaPlayer提供的常用方法 方法 阅读详情

1.播放应用的资源文件(res/raw/)

java代码示例:

MainActivity.java

public class MainActivity extends AppCompatActivity {
    private MediaPlayer mediaPlayer;
    private SeekBar seekBar;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        seekBar = (SeekBar) findViewById(R.id.seekBar);
        seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
            @Override
            public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {}
            @Override
            public void onStartTrackingTouch(SeekBar seekBar) {}
            @Override
            public void onStopTrackingTouch(SeekBar seekBar) {
                //获取拖动结束之后的位置
                int progress=seekBar.getProgress();
                //跳转到某个位置播放
                mediaPlayer.seekTo(progress);
            }
        });
    }
    public void play(View view){
        ImageButton imageButton= (ImageButton) view;
       if(mediaPlayer==null){
        //播放内存卡中的音频
            mediaPlayer=new MediaPlayer();
           //设置类型
           mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
           /* 得到文件路径 *//* 注:文件存放在SD卡的根目录,一定要进行prepare()方法,使硬件进行准备 */
           File file = new File(Environment.getExternalStorageDirectory(),"a.mp3");
           try{
               /* 为MediaPlayer 设置数据源 */
               mediaPlayer.setDataSource(file.getAbsolutePath());
                /* 准备 */
               mediaPlayer.prepare();
           }catch(Exception ex){
               ex.printStackTrace();
           }
           mediaPlayer.start();
           // 把图标变为暂停图标
           imageButton.setImageResource(android.R.drawable.ic_media_pause);
           //获取音乐的总时长
           int duration=mediaPlayer.getDuration();
           //设置进度条的最大值为音乐总时长
           seekBar.setMax(duration);
           new MyThread().start();

//           //实例化MediaPlayer
///           mediaPlayer = MediaPlayer.create(this, R.raw.one);
////           mediaPlayer.start();
//           //把图标变为暂停图标
//           imageButton.setImageResource(android.R.drawable.ic_media_pause);
//          //获取音乐的总时长
//           int duration=mediaPlayer.getDuration();
//           //设置进度条的最大值为音乐总时长
//           seekBar.setMax(duration);
//           new MyThread().start();
        }else if(mediaPlayer.isPlaying()){
            mediaPlayer.pause();
            //把图标变为播放图标
            imageButton.setImageResource(android.R.drawable.ic_media_play);
        }else{
           mediaPlayer.start();
           //把图标变为暂停图标
           imageButton.setImageResource(android.R.drawable.ic_media_pause);
       }
    }

    class MyThread extends Thread{
        @Override
        public void run() {
            super.run();
            while(seekBar.getProgress()<=seekBar.getMax()){
              //获取当前位置音乐播放的位置
                 int currentPosition=mediaPlayer.getCurrentPosition();
              //让进度条滚动起来
                seekBar.setProgress(currentPosition);
            }
        }
    }
}


简单的一个布局文件:

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_marginTop="16dp"
    android:layout_marginLeft="16dp"
    >

    <SeekBar
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:id="@+id/seekBar" />

    <ImageButton
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@android:drawable/ic_media_play"
        android:onClick="play"
        />
</LinearLayout>

程序说明:

以上例子介绍了MediaPlayer在播放应用内的音频和播放内存卡中的音频步骤和方式.

下面介绍的是另外一种方法

2.播放外部存储上的音频资源文件(sdcard)

代码实现

1)导入歌曲到手机SD卡的qqmusic/song目录中,这里我随便导入了几首歌曲:《三生三世》、《爱丫爱丫》、《安和桥》和《和你在一起》,路径可随自己而定。

新建一个类MusicService继承Service,在类中定义一个MyBinder,有一个方法用于返回MusicService本身,在重载onBind()方法的时候返回

 public final IBinder binder = new MyBinder();
    public class MyBinder extends Binder{
        MusicService getService() {
            return MusicService.this;
        }
    }
    /**
     * onBind 是 Service 的虚方法,因此我们不得不实现它。
     * 返回 null,表示客服端不能建立到此服务的连接。
     */
    @Override
    public IBinder onBind(Intent intent) {
        return binder;
    }

2)在MusicService中,声明一个MediaPlayer变量,进行设置歌曲路径,这里我选择歌曲1作为初始化时候的歌曲

private String[] musicDir = new String[]{
	    Environment.getExternalStorageDirectory().getAbsolutePath()+"/qqmusic/song/三生三世.mp3",
            Environment.getExternalStorageDirectory().getAbsolutePath()+"/qqmusic/song/爱丫爱丫.mp3",
            Environment.getExternalStorageDirectory().getAbsolutePath()+"/qqmusic/song/安和桥.mp3",
            Environment.getExternalStorageDirectory().getAbsolutePath() +"/qqmusic/song/和你在一起.mp3"};
    private int musicIndex = 1;
    public static MediaPlayer mp = new MediaPlayer();
    public MusicService() {
        try {
            musicIndex = 1;
            mp.setDataSource(musicDir[musicIndex]);
            mp.prepare();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }


3)功能:有相关歌曲播放、暂停、停止、退出的方法,还可以切换上一首和下一首,主要方法如下:

//播放/暂停按钮
    public void playOrPause() {
        if(mp.isPlaying()){
            mp.pause();
        } else {
            mp.start();
        }
    }
    //下一首
    public void nextMusic() {
        if(mp != null && musicIndex < 3) {
            mp.stop();
            try {
                mp.reset();
                mp.setDataSource(musicDir[musicIndex+1]);
                musicIndex++;
                mp.prepare();
                mp.seekTo(0);
                mp.start();
            } catch (Exception e) {
                Log.d("hint", "can't jump next music");
                e.printStackTrace();
            }
        }else {
            Toast.makeText(this, "没有更多歌曲啦", Toast.LENGTH_SHORT).show();
        }
    }
    //上一首
    public void preMusic() {
        if(mp != null && musicIndex > 0) {
            mp.stop();
            try {
                mp.reset();
                mp.setDataSource(musicDir[musicIndex-1]);
                musicIndex--;
                mp.prepare();
                mp.seekTo(0);
                mp.start();
            } catch (Exception e) {
                Log.d("hint", "can't jump pre music");
                e.printStackTrace();
            }
        }else{
            Toast.makeText(this, "已经是第一首啦", Toast.LENGTH_SHORT).show();
        }
    }


4)注册MusicService并赋予权限,允许读取外部存储空间。

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

    <service android:name="com.pxd.mediaplayer.MusicService" android:exported="true"/>

以上步骤是MusicService类核心代码。

接下来我们需在

5)MainAcitvity中声明ServiceConnection,调用bindService保持与MusicService通信,通过intent的事件进行通信,在onCreate()函数中绑定Service

 private ServiceConnection sc = new ServiceConnection() {
        @Override
        public void onServiceConnected(ComponentName componentName, IBinder iBinder) {
            musicService = ((MusicService.MyBinder)iBinder).getService();
        }
        @Override
        public void onServiceDisconnected(ComponentName componentName) {
            musicService = null;
        }
    };
    private void bindServiceConnection() {
        Intent intent = new Intent(Main.this, MusicService.class);
        startService(intent);
        bindService(intent, sc, this.BIND_AUTO_CREATE);
    }
@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        musicService = new MusicService();
        bindServiceConnection();
        seekBar = (SeekBar)this.findViewById(R.id.MusicSeekBar);
        seekBar.setProgress(musicService.mp.getCurrentPosition());
        seekBar.setMax(musicService.mp.getDuration());

        musicBegin = (TextView)this.findViewById(R.id.MusicBegin);
        musicTime = (TextView)this.findViewById(R.id.MusicTime);
        musicStatus=(TextView)this.findViewById(R.id.MusicStatus);
        btnPlayOrPause = (ImageButton) findViewById(R.id.BtnPlayorPause);

        Log.d("hint", Environment.getExternalStorageDirectory().getAbsolutePath()+"/You.mp3");
    }

bindService函数回调onSerciceConnented函数,通过MusiceService函数下的onBind()方法获得binder对象并实现绑定

6)通过Handle实时更新UI,这里主要使用了post方法并在Runnable中调用postDelay方法实现实时更新UI,Handle.post方法在onResume()中调用,使得程序刚开始时和重新进入应用时能够更新UI

在Runnable中更新SeekBar的状态,并设置SeekBar滑动条的响应函数,使歌曲跳转到指定位置

public android.os.Handler handler = new android.os.Handler();
    public Runnable runnable = new Runnable() {
        @Override
        public void run() {
            if(musicService.mp.isPlaying()) {
              musicStatus.setText("状态:正在播放.....");
              btnPlayOrPause.setImageResource(android.R.drawable.ic_media_pause);
            } else {
              musicStatus.setText("状态:未播放");
               btnPlayOrPause.setImageResource(android.R.drawable.ic_media_play);
            }
            musicBegin.setText(time.format(musicService.mp.getCurrentPosition()));
            musicTime.setText(time.format(musicService.mp.getDuration()));

            seekBar.setProgress(musicService.mp.getCurrentPosition());
            seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
                @Override
                public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
                    if (fromUser) {
                        musicService.mp.seekTo(seekBar.getProgress());
                    }
                }
                @Override
                public void onStartTrackingTouch(SeekBar seekBar) {

                }
                @Override
                public void onStopTrackingTouch(SeekBar seekBar) {

                }
            });
            handler.postDelayed(runnable, 100);
        }
    };
 @Override
    protected void onResume() {
        if(musicService.mp.isPlaying()) {
            musicStatus.setText("状态:正在播放.....");
            btnPlayOrPause.setImageResource(android.R.drawable.ic_media_pause);
        } else {
            musicStatus.setText("状态:未播放");
            btnPlayOrPause.setImageResource(android.R.drawable.ic_media_play);
        }
        seekBar.setProgress(musicService.mp.getCurrentPosition());
        seekBar.setMax(musicService.mp.getDuration());
        handler.post(runnable);
        super.onResume();
        Log.d("hint", "handler post runnable");
    }

7)给每个按钮设置响应函数,在onDestroy()中添加解除绑定,避免内存泄漏

public void onClick(View view) {
        switch (view.getId()) {
            case R.id.BtnPlayorPause:
                musicService.playOrPause();
                break;
            case R.id.BtnQuit:
                handler.removeCallbacks(runnable);
                unbindService(sc);
                try {
                    System.exit(0);
                } catch (Exception e) {
                    e.printStackTrace();
                }
                break;
            case R.id.btnPre:
                musicService.preMusic();
             // Toast.makeText(musicService, "上一首切换", Toast.LENGTH_SHORT).show();
                break;
            case R.id.btnNext:
                musicService.nextMusic();
                //Toast.makeText(musicService, "下一首切换", Toast.LENGTH_SHORT).show();
                break;
            default:
                break;
        }
    }

    @Override
    public void onDestroy() {
        unbindService(sc);
        super.onDestroy();
    }

8)在Button中赋予onClick属性指向接口函数

main.xml:

<LinearLayout 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:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin" android:paddingBottom="@dimen/activity_vertical_margin"
    android:orientation="vertical"
    tools:context=".Main">
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/MusicStatus"
        android:layout_gravity="center_horizontal"
        android:textSize="20sp"
        android:text=""/>
    <SeekBar
        android:layout_marginTop="16dp"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:id="@+id/MusicSeekBar"/>
    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content">
     <TextView
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:id="@+id/MusicBegin"
         android:text="  "/>
     <TextView
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:id="@+id/MusicTime"
         android:layout_marginLeft="270dp"
         android:text="  "/>
    </LinearLayout>
    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:layout_gravity="center_horizontal">
        <ImageButton
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/btnPre"
            android:src="@android:drawable/ic_media_previous"
            android:onClick="onClick" />

        <ImageButton
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/BtnPlayorPause"
            android:src="@android:drawable/ic_media_play"
            android:onClick="onClick"
            />

        <ImageButton
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/btnNext"
            android:src="@android:drawable/ic_media_next"
            android:onClick="onClick"/>



    </LinearLayout>

        <Button
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/BtnQuit"
            android:text="退出"
            android:onClick="onClick"/>

</LinearLayout>

这样就可以实现简单音乐播放器的播放。

效果图

      

总结

  1. 读取SD卡内存的时候,应该使用android.os.Environment库中的getExternalStorageDirectory()方法,然而并不能生效。应该再使用getAbsolutePath()获取绝对路径后读取音乐才生效。
  2. 切换歌曲的时候try块不能正确执行。检查过后,也是执行了stop()函数后再重新setDataSource()来切换歌曲的,但是没有效果。查阅资料后,发现setDataSource()之前需要调用reSet()方法,才可以重新设置歌曲。

简述如何使用Handler实时更新UI

方法一:
Handle的post方法,在post的Runable的run方法中,使用postDelay方法再次post该Runable对象,在Runable中更新UI,达到实时更新UI的目的
方法二:
多开一个线程,线程写一个持续循环,每次进入循环内即post一次Runable,然后休眠1000ms,亦可做到实时更新UI











Android 使用MediaPlayer播放音频详解 官方资料 MediaPlayer 概览 媒体播放器 其实,通过阅读上面两个文档,基本上就可以实现自己的需求了,毕竟每个人的需求不一样。由于需求只用到播放音频部分,所以不会设计涉及视频播放。 MediaPlayer位于android.media包下,media下还有一系列相关的API: MediaPlayer :可用于控制音频/视频文件和流的播放。 可以在VideoView找到有关如何使用此类中的方法的示例。 AudioTrack :为应用程序管理和播放单个音频资源。 它允许将 P... 阅读详情

相关推荐

Android MediaPlayer使用之网络访问异常

Android MediaPlayer使用之网络访问异常 1.问题描述 2019-04-02 21:26:15.552 22138-22138/com.uyeh.mediaplayertest D/MainActivity: onClick: play 2019-04-02 21:26:15.568 22138-22138/com.uyeh.mediaplayertest V/MediaHTTP...

qimi123456的专栏 7448

Android之MediaPlayer的简单介绍之播放音乐

一个极其简单的音乐播放器~很简单很简单~~ 先看效果吧: 接下来我就说下步骤: 1.音乐路径: 我们要把播放的音乐文件放在虚拟机的SD卡中,要到第一个0目录下面,按照下面这个图来~ 2.播放音乐要MediaPlayer MediaPlayer mediaPlayer=new MediaPlayer(); 3.音乐的声音控制 AudioManager au

重心开始,重新开始 1万+

使用Android MediaPlayer播放媒体文件

我们平时利用Android手机娱乐最常见的方式莫过于听歌和看电影了,当然还有玩游戏,当然,这里我要说的是针对Android对于媒体文件播放的支持。Android里面提供了MediaPlayer类来播放媒体文件,下面来看一下怎样用MediaPlayer对象来播放媒体文件: 一般来说,用MediaPlayer类来播放媒体文件有以下几个步骤:1、新建一个MediaPlayer对象。 2、调用setDa

指点 5604

Android实现视频播放的3种实现方式

Android提供了常见的视频的编码、解码机制。使用Android自带的MediaPlayer、MediaController等类可以很方便的实现视频播放的功能。支持的视频格式有MP4和3GP等。这些多媒体数据可以来自于Android应用的资源文件,也可以来自于外部存储器上的文件,甚至可以是来自于网络上的文件流。 下面来说一下视频播放的几种实现方式: 1、MediaController+VideoView实现方式 这种方式是最简单的实现方式。VideoView继承了SurfaceView同时实现了Med

weixin_42602900的博客 8179

Android MediaPlayer使用小结

Android MediaPlayer的使用小结,包括具体流程以及注意事项

咕快快的博客 666

android浏览SD卡目录文件,实现音频播放

android浏览SD卡目录文件,实现音频播放

安卓播放视频MediaPlayer

示例代码中包括了两个实现视频播放的方法,13-15行是用了一个开源框架,非常流弊,开源库地址:https://github.com/lipangit/JieCaoVideoPlayer 开源库中也是用的MediaPlayer实现播放的,不过他整合了暂停继续,音量调节,进度调节,全屏等等很多强大的功能,这些功能自己开发起来会非常花费时间。 另一个就是用MediaPlayer实现的,只实现了个基本

高低调的博客 1848

西门子smart能搜到cpu但连接当前IP地址失败

将ip地址改到同一网段 本机为192.168.1.119就是192.168.1.1网段,但plc在192.168.0.1网段,所以显示ip连接失败,改为同一网段192.168.1.xxx即可(为避免ip冲突尽量改到200往后最大255)如果显示这一步,那么你的物理连接是没有问题的,应当是plc和电脑并不在同一网段导致的问题。输入ipconfig 查看本机网段与plc是否为同一网段。此电脑就不在同一网段所有造成通讯失败,接下来解决这个问题。win+r打开运行,打开cmd。再次尝试,如果还是报错,那么。

weixin_62678581的博客 9867

Android 多媒体 MediaPlayer之从三种资源文件中获取数据播放

MediaPlayer类最让我想到的是音频和视频的播放了  该类提供了开始或恢复播放start()、暂停播放pause()、停止播放stop()等方法。该类位于android.media包下,详见API文档。   三种获取资源文件的方式 1.播放应用内的音频文件 MediaPlayer mMediaPlayer=new MediaPlayer.create(this, R.raw.love

googleoyyp的博客 7094

语言随机效应模型_线性混合效应模型 VS 方差分析

线性混合效应模型相比方差分析具有很多优点。为了让大家更直观的了解,我们来做一下两者的对比。基于模拟的方法,生成了以下数据dat_sim:这种数据格式是长格式,也就是从实验软件导出来的那种数据格式。这种数据格式可以直接使用线性混合效应模型进行分析。该实验设计是被试内项目间的单因素两水平设计。category是自变量,两个水平分别是outgroup和ingroup,outgroup比ingr...

weixin_31960565的博客 2688

内网(极空间)搭建gitlab跳板机转发端口及域名配置

然后,回头尝试用内网地址+15022 clone,成功,用公网的ip+15222 clone失败,那就是定位到时nginx转发的问题了。首先想到的就是 git clone是通过ssh的22端口进行下载的,那就需要打通22端口,则又配置22端口的nginx转发。然后,我通过ssh命令,做一个端口转发,以实现内网穿透,将服务端口链接到跳板机上。然后穿透到阿里云服务器跳板机的端口,只能内网访问,需要用nginx做个转发,才能用公网ip进行访问。然后,如上,我的80端口,映射15080,22端口映射15022。

God丶Davide的博客 6075

Android 之 使用VideoView播放视频

[size=small][color=olive][b]1、在Android 中播放视频的方式有两种: * 第一种方式是使用MediaPlayer 结合SurfaceView 来播放,通过MediaPlayer来控制视频的播放、暂停、进度等; 通过SurfaceView 来显示视频内容; 优点:灵活性高,可以进行自定义; 缺点:难度比较大; * 第二种方式是...

Sunzone 239

摄像头visio_最全面弱电智能VISIO图标集(百个),高大上方案就靠这个了

原标题:最全面弱电智能VISIO图标集(百个),高大上方案就靠这个了不会用Visio,Visio画拓扑画的很丑,怎么办?本期sin66小编免费分享一份最全面的弱电智能VISIO图标集(百个)给大家,以后画拓扑、做方案,直接高大上起来!需要本期资料直接看文末!!接下来我们一起看一下这些Visio图标大全:我们从下图可以看出前端设备主要是由枪机,筒机,无线摄像头,半球,球机,USB摄像头等构成,对于绘...

weixin_39644915的博客 1万+

MediaPlayer基本使用方式

Android MediaPlayer基本使用方式   使用MediaPlayer播放音频或者视频的最简单例子: JAVA代码部分:

moubenmao的专栏 1583

STM32 SAES硬件加密协处理器全模式工程实践指南

AES(高级加密标准)是嵌入式系统中最基础且关键的对称密码算法,其硬件加速实现直接影响安全、性能与功耗平衡。Secure AES Coprocessor(SAES)作为STMicroelectronics在STM32U5等高安全MCU中集成的专用密码协处理器,不仅支持标准ECB/CBC/CTR模式,更原生兼容GCM和CCM等认证加密模式,具备抗侧信道、密钥保护与DMA卸载能力。理解其寄存器状态机(CHMOD/MODE/CPHASE)、NPBLB数据对齐机制及GCM四阶段编程范式,是规避Tag校验失败、IV错

weixin_42311427的博客 77

曙光服务器RAID配置避坑指南:MegaRAID SAS 9361-8i实战(含Foreign状态处理)

本文详细解析了曙光服务器搭配MegaRAID SAS 9361-8i控制器的RAID配置全流程,包括RAID0和RAID5的创建、Foreign状态处理及性能优化策略。特别针对磁盘迁移中的Foreign状态问题,提供了系统化的解决方案和高级恢复技巧,助力企业级IT运维提升存储配置的稳定性和可靠性。

weixin_29200741的博客 412

Android MediaPlayer基本使用方式

1)如何获得MediaPlayer实例: 可以使用直接new的方式: MediaPlayer mp = new MediaPlayer(); 也可以使用create的方式,如: MediaPlayer mp = MediaPlayer.create(this, R.raw.test);//这时就不用调用setDataSource了 2) 如...

abc20899的专栏 1304

【论文分享】【Agent】ProAgent: Building Proactive Cooperative Agents with Large Language Models

多智能体系统是由多个智能体组成的集合,这些智能体可以是软件程序、机器人、传感器或其他实体,它们各自具备一定的智能和自主性,并通过交互协作来实现单个智能体难以完成的复杂目标。

nanxun___的博客 1124

Android开发 使用实现 MediaPlayer 音频播放

Android开发 使用实现 MediaPlayer 音频播放 简介: 本篇文章是介绍 MediaPlayer 播放音频的简单运用(不包含视频). 目录: 1.什么是 MediaPlayer 2.MediaPlayer 的常用方法 3.MediaPlayer 的简单运用 1.什么是 MediaPlayer 介绍: MediaPlayer 是处于Android多媒体包下 "android.med...

神经大条蕾弟的博客 5212

GEE土地分类:一文读懂精度评定—混淆矩阵confusion matrix、整体精度OA、用户者精度、生产者精度、kappa系数和F1score系数含案例

本文介绍了如何在 Google Earth Engine (GEE) 中构建和分析混淆矩阵,以评估分类模型的性能。首先,通过 ee.Array 构建混淆矩阵,并展示了如何指定自定义类标签。接着,计算了多种性能指标,包括准确率、Kappa 值、F1-score、消费者准确率和生产者准确率。此外,还演示了如何计算不同类别的 F1-score。最后,通过一个实际案例,展示了如何利用 GEE 进行土地分类,并评估分类器的性能,包括训练和验证样本的准确率、Kappa 值等指标。这些步骤帮助用户理解模型的优缺点,并进行

此星光明博客 443

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

安卓MediaPlayer源码跟读解析

简介: 安卓通过MediaPlayer这个类提供了一整套接口呈现给给客户实现视音频的播放。可是凡事必究其根,我们今天就来看看安卓的MediaPlayer框架(基于Android 8.0)究竟是怎么实现的。因为框架层全是C/C++代码,建议读者拥有相关基础,没有也没关系,都能看懂。 概要: 先给出网上扒的MediaPlayer状态图,MediaPlayer常用...

黑白棋的博客 3301

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Android:使用MediaPlayer播放本地音乐

Android:使用MediaPlayer播放本地音乐标签(空格分隔): androidAndroid使用MediaPlayer播放本地音乐 一装载音频 1 静态方法 2 动态加载 3 两种方式对比 二MediaPlayer的控制方法 三事件监听 1 准备监听事件 2 完成监听事件 3 错误监听事件 4 定位监听事件 四进度控制 1 添加SeekBar控件 2 给SeekBar设置监听 3 在启动播

陈小默的博客 2万+

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

安卓使用MediaPlayer播放视频

安卓使用MediaPlayer播放视频 媒体播放器MediaPlayer不仅可以播放音频文件,还可以播放格式为3.gp的视频文件。 与播放音频不同之处为,用于视频播放的播放承载体必须是实现了表面视图处理接口(surfaceHolder)的视图组件,即需要使用SurfaceView组件来显示播放视频图像。 视频文件shipin.3gp,复制到SD卡sdcard/Movies目录下。 这里读取sd卡的数据 安卓10以上需要在Manifest.xml加一句android:requestLegacyExterna

qq_42772570的博客 2740

Android 多媒体MediaPlayer使用详解

现在的手机功能越来越丰富了,遥想10年前,MP3,MP4,MP5,还是很流行的,博主当时读高中时很想拥有一台,可以听音乐和看电影。可是条件有限,学校也禁止此东西,所以只能偷偷的玩。而现在我们的手机也很早以前就支持了这些功能,而且界面和功能也远远超过了MP4。好吧,说多了,今天本文介绍的是Andriod系统自带的Mediaplayer,和VideoView实现简单的音乐和视频的播放,至于想做出如酷狗

gongwq的博客 3万+

Java中mediaplayer_Android开发之MediaPlayer基本使用方法详解

本文实例讲述了Android MediaPlayer基本使用方法。分享给大家供大家参考,具体如下:使用MediaPlayer播放音频或者视频的最简单例子:Java代码部分:public class MediaPlayerStudy extends Activity {private Button bplay,bpause,bstop;private MediaPlayer mp = new Med...

weixin_28843015的博客 590
上一篇: Android ContentProvider的使用
下一篇: ContentProvider之获取手机联系人
d_shadow
博客等级 码龄10年 42粉丝 10原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值