Android 迷你播放器

简介:
今天我们要讲述一个具有控制界面的音乐播放器
1:UI布局layout/main.xml
<?xml version= "1.0" encoding= "utf-8"?>
<LinearLayout xmlns:android= "http://schemas.android.com/apk/res/android"
        android:orientation="vertical"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        >
  <TextView
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="迷你音乐播放器"
  />
  
  <LinearLayout
    android:orientation="horizontal"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
  >
    <ImageButton
      android:id="@+id/play"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:src="@drawable/play"
    />
    <ImageButton
      android:id="@+id/pause"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:src="@drawable/pause"
    />  
    <ImageButton
      android:id="@+id/stop"
      android:layout_height="wrap_content"
      android:layout_width="wrap_content"
      android:src="@drawable/stop"
    />
  </LinearLayout>
</LinearLayout>
2:实现功能核心代码MediaActivity.java
package com.android.test;

import android.app.Activity;
import android.app.AlertDialog;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnCompletionListener;
import android.os.Bundle;
import android.view.View;
import android.widget.ImageButton;
import android.widget.ProgressBar;

public  class MediaActivity  extends Activity  implements OnCompletionListener {
    
   private ImageButton play, pause, stop;
   //声明MediaPlayer实例
   private MediaPlayer mp;  
         public  void onCreate(Bundle savedInstanceState) {
                 super.onCreate(savedInstanceState);
                 //设置当前页面布局
                setContentView(R.layout.main);         
                 //通过findViewById方法获得按钮实例
                play = (ImageButton)findViewById(R.id.play);
                pause = (ImageButton)findViewById(R.id.pause);
                stop = (ImageButton)findViewById(R.id.stop);
         
                 //为按钮添加单击时间监听器
                play.setOnClickListener( new View.OnClickListener() {

       public  void onClick(View v) {
         //开始
        play();
      }                
                });
                
                pause.setOnClickListener( new View.OnClickListener() {

       public  void onClick(View v) {
         //暂停
        pause();
      }
                });
                
                stop.setOnClickListener( new View.OnClickListener() {

       public  void onClick(View v) {
         //停止
        stop();
      }              
                });
                 //准备
                setup();
        }
        
         public  void onDestory() {
           super.onDestroy();
           if(stop.isEnabled()) {
            stop();
          }
        }

         //准备
   private  void setup() {
     //加载播放文件
    loadClip();
     //使播放按钮生效
    play.setEnabled( true);
     //使暂停按钮失效
    pause.setEnabled( false);
     //使停止按钮失效
    stop.setEnabled( false);
  }

   private  void loadClip() {
     try{
       //实例化MediaPlayer
      mp = MediaPlayer.create( this, R.raw.test);
       //设置监听器
      mp.setOnCompletionListener( this);
    }  catch(Throwable t) {
      error(t);
    }
  }
  
   private  void error(Throwable t) {
    AlertDialog.Builder builder =  new AlertDialog.Builder( this);
    builder.setTitle( "报错啦!").setMessage(t.toString()).setPositiveButton( "确定"null).show();
  }

   public  void stop() {
     //停止
    mp.stop();
     //使暂停按钮失效
    pause.setEnabled( false);
     //使停止按钮失效
    stop.setEnabled( false);
    
     try {
       //准备
      mp.prepare();
       //定位到开始
      mp.seekTo(0);
       //使播放按钮生效
      play.setEnabled( true);
    }  catch (Throwable t) {
      error(t);
    }
  }

   public  void pause() {
     //暂停
    mp.pause();
     //使播放按钮生效
    play.setEnabled( true);
     //使暂停按钮失效
    pause.setEnabled( false);
     //使停止按钮生效
    stop.setEnabled( true);
  }

   public  void play() {
     //播放
    mp.start();
     //使播放按钮失效
    play.setEnabled( false);
     //使暂停按钮生效
    pause.setEnabled( true);
     //使停止按钮生效
    stop.setEnabled( true);
  }

   public  void onCompletion(MediaPlayer mp) {
     //停止
    stop();
  }
}
3:运行程序如图









本文转自 Art_Hero 51CTO博客,原文链接:http://blog.51cto.com/curran/523085,如需转载请自行联系原作者
目录
相关文章
|
缓存 网络协议 开发工具
庖丁解牛之-Android平台RTSP|RTMP播放器设计
我们在做Android平台RTSP或者RTMP播放器开发的时候,需要注意的点非常多,以下,以大牛直播SDK(官方)的接口为例,大概介绍下相关接口设计:
391 0
|
前端开发 开发工具 Android开发
Android播放器之SurfaceView与GLSurfaceView
Surface的官方介绍:Handle onto a raw buffer that is being managed by the screen compositor,Surface是一个raw buffer的句柄,通过它在raw buffer上进行绘制,可以通过Surface获得一个Canvas。
494 0
|
XML Java Android开发
Android Studio App开发之服务Service的讲解及实战(包括启动和停止,绑定与解绑,推送服务到前台实现音乐播放器,附源码)
Android Studio App开发之服务Service的讲解及实战(包括启动和停止,绑定与解绑,推送服务到前台实现音乐播放器,附源码)
1811 0
|
存储 编解码 开发工具
Android平台毫秒级低延迟HTTP-FLV直播播放器技术探究与实现
本文详细探讨了在Android平台上实现HTTP-FLV播放器的过程。首先介绍了FLV格式的基础,包括文件头和标签结构。接着分析了HTTP-FLV传输原理,通过分块传输实现流畅播放。然后重点讲解了播放器的实现步骤,涵盖网络请求、数据解析、音视频解码与渲染,以及播放控制功能的设计。文章还讨论了性能优化和网络异常处理的方法,并总结了HTTP-FLV播放器的技术价值,尤其是在特定场景下的应用意义。
790 11
|
XML 存储 数据库
如何使用Android Studio创建一个基本的音乐播放器应用
如何使用Android Studio创建一个基本的音乐播放器应用
891 0
|
开发工具 Android开发 iOS开发
Android、iOS平台RTMP/RTSP播放器实现实时音量调节
介绍移动端RTMP、RTSP播放器实时音量调节之前,我们之前也写过,为什么windows播放端加这样的接口,windows端播放器在多窗口大屏显示的场景下尤其需要,尽管我们老早就有了实时静音接口,相对实时静音来说,播放端实时音量调节粒度更细,从[0, 100],用户体验更好。
386 1
|
Java 程序员 开发工具
Android|修复阿里云播放器下载不回调的问题
虽然 GC 带来了很多便利,但在实际编码时,我们也需要注意对象的生命周期管理,该存活的存活,该释放的释放,避免因为 GC 导致的问题。
245 2
|
编解码 开发工具 Android开发
Android平台RTSP|RTMP播放器如何实现TextureView渲染
本文介绍了在Android平台上使用TextureView进行RTSP和RTMP视频流渲染的技术背景和实现方法。TextureView相较于SurfaceView具备更高性能、更强功能性和更灵活的绘制方式等优势,但也有必须在硬件加速环境下运行和较高内存占用等局限。文中详细展示了如何在SmartPlayerV2工程中创建和配置TextureView,并通过代码示例解释了如何根据视频分辨率信息调整显示比例,以及处理TextureView的各种生命周期回调。此外,还列举了该播放器SDK支持的多项高级功能,如多实例播放、多种编码格式支持、硬解码能力等,旨在帮助开发者更好地理解和实现高性能的直播播放器。
739 3
|
算法 数据处理 开发工具
Android平台RTSP|RTMP播放器如何回调YUV或RGB数据
在开发Android平台上的RTSP或RTMP播放器时,开发者不仅追求低延迟播放,还希望获取解码后的视频数据(如YUV或RGB格式),以便进行视觉算法分析。使用大牛直播SDK中的SmartPlayer,可在确保播放流畅的同时,通过设置外部渲染器(`SmartPlayerSetExternalRender`)来高效地回调原始视频数据。例如,对于RGBA数据,需实现`NTExternalRender`接口,并重写相关方法以处理数据和尺寸变化。同样地,对于I420(YUV)数据,也需要相应地实现接口以满足需求。这种方式使得开发者能在不影响常规播放功能的情况下,进行定制化的视频处理任务。
310 1
|
编解码 网络协议 开发工具
Android平台RTSP|RTMP直播播放器技术接入说明
大牛直播SDK自2015年发布RTSP、RTMP直播播放模块,迭代从未停止,SmartPlayer功能强大、性能强劲、高稳定、超低延迟、超低资源占用。无需赘述,全自研内核,行业内一致认可的跨平台RTSP、RTMP直播播放器。本文以Android平台为例,介绍下如何集成RTSP、RTMP播放模块。
863 0

热门文章

最新文章