zoukankan      html  css  js  c++  java
  • Android简易实战教程--第四十一话《vitamio网络收音机》

    在Android初级教程专栏里面,介绍了Android原生的VideoView和vitamio框架Android视频媒体相关,VideoView和开源框架vitamio 。并演示了播放网络视频的对应的Demo,本篇以小案例的方式,使用vitamio完成播放网络的收音机频道。

    集成vitamio过程如下(回忆):

    ViewView的集成过程:

    1. 下载lib包.demo:https://github.com/yixia/VitamioBundle
    2. 新建工程,引入lib包
    3. 是否修改androidmanifest.xml

      1. 权限

        <uses-permission android:name="android.permission.INTERNET" />
        
      2. 添加activity

        <!-- vitamio add -->
        <activity
        android:name="io.vov.vitamio.activity.InitActivity"
        android:configChanges="orientation|screenSize|smallestScreenSize|keyboard|keyboardHidden|navigation"
        android:launchMode="singleTop"
        android:theme="@android:style/Theme.NoTitleBar"
        android:windowSoftInputMode="stateAlwaysHidden" />
        
    4. 写代码

      //使用vitamio需要初始化引擎,引擎的检查
      /**---------------需要注意 begin---------------**/
      if (!LibsChecker.checkVitamioLibs(this))
          return;
      /**---------------需要注意 end---------------**/
      
      mVitamio_vv = (VideoView) findViewById(R.id.vitamio_vv);
      /**---------------设置监听---------------**/
      mVitamio_vv.setOnPreparedListener(this);
      mVitamio_vv.setOnErrorListener(this);
      mVitamio_vv.setOnCompletionListener(this);
      //设置路径
      mVitamio_vv.setVideoPath("storage/emulated/0/Download/5.mkv");
      //设置控制条
      mVitamio_vv.setMediaController(new MediaController(this));
      //开始播放
      mVitamio_vv.start();
    本案例Demo:

    布局文件代码:

    <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=".MainActivity" >
    
        <Button
            android:layout_width="wrap_content"
            android:onClick="click"
            android:layout_height="wrap_content"
            android:text="播放mms网络收音机" />
    
    </RelativeLayout>

    只有一个按钮,给这个按钮xml的方式添加点击事件。作用是播放mms网络收音机

    配置文件中的代码如下:

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.example.vitamiodemo_mediaplay"
        android:versionCode="1"
        android:versionName="1.0" >
    
        <uses-sdk
            android:minSdkVersion="8"
            android:targetSdkVersion="17" />
    
        <application
            android:allowBackup="true"
            android:icon="@drawable/ic_launcher"
            android:label="@string/app_name"
            android:theme="@style/AppTheme" >
            <activity
                android:name="com.example.vitamiodemo_mediaplay.MainActivity"
                android:label="@string/app_name" >
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
    
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
            <!-- vitamio add -->
            <activity
                android:name="io.vov.vitamio.activity.InitActivity"
                android:configChanges="orientation|screenSize|smallestScreenSize|keyboard|keyboardHidden|navigation"
                android:launchMode="singleTop"
                android:theme="@android:style/Theme.NoTitleBar"
                android:windowSoftInputMode="stateAlwaysHidden" />
        </application>
    
        <uses-permission android:name="android.permission.INTERNET" />
    
    </manifest>

    1. 权限

      <uses-permission android:name="android.permission.INTERNET" />
      
    2. 添加activity

      <!-- vitamio add -->
      <activity
      android:name="io.vov.vitamio.activity.InitActivity"
      android:configChanges="orientation|screenSize|smallestScreenSize|keyboard|keyboardHidden|navigation"
      android:launchMode="singleTop"
      android:theme="@android:style/Theme.NoTitleBar"
      android:windowSoftInputMode="stateAlwaysHidden" />
      
    活动中的代码:

    package com.example.vitamiodemo_mediaplay;
    
    import io.vov.vitamio.LibsChecker;
    import io.vov.vitamio.MediaPlayer;
    import io.vov.vitamio.MediaPlayer.OnCompletionListener;
    import io.vov.vitamio.MediaPlayer.OnErrorListener;
    import io.vov.vitamio.MediaPlayer.OnPreparedListener;
    import android.app.Activity;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.Toast;
    
    public class MainActivity extends Activity implements OnErrorListener, OnPreparedListener, OnCompletionListener {
    
    	private MediaPlayer mMediaPlayer;
    
    	@Override
    	protected void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.activity_main);
    		//使用vitamio需要初始化引擎,引擎的检查
    		/**---------------需要注意 begin---------------**/
    		if (!LibsChecker.checkVitamioLibs(this))
    			return;
    		/**---------------需要注意 end---------------**/
    
    	}
    
    	public void click(View v) {
    		try {
    			mMediaPlayer = new MediaPlayer(this);
    			//设置监听器
    			mMediaPlayer.setOnErrorListener(this);
    			mMediaPlayer.setOnPreparedListener(this);
    			mMediaPlayer.setOnCompletionListener(this);
    			//准备播放
    			mMediaPlayer.reset();//重置MediaPlayer
    			//设置播放来源
    			mMediaPlayer.setDataSource("mms://mediasrv2.iptv.xmg.com.cn/yinyue");
    			mMediaPlayer.prepareAsync();//网络,所以使用异步加载。真正的播放去对应的监听器里面开启(onPrepared)
    		} catch (Exception e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    
    	}
    
    	@Override
    	public void onCompletion(MediaPlayer mp) {
    		Toast.makeText(getApplicationContext(), "播放完了", 0).show();
    	}
    
    	@Override
    	public void onPrepared(MediaPlayer mp) {
    		Toast.makeText(getApplicationContext(), "准备好了", 0).show();
    		mMediaPlayer.start();
    
    	}
    
    	@Override
    	public boolean onError(MediaPlayer mp, int what, int extra) {
    		Toast.makeText(getApplicationContext(), "资源有问题", 0).show();
    		// TODO
    		return true;
    	}
    
    	@Override
    	protected void onDestroy() {
    		if (mMediaPlayer != null) {
    			//销毁活动,释放资源
    			mMediaPlayer.release();
    			mMediaPlayer = null;
    		}
    		super.onDestroy();
    	}
    
    }
    

    还是老规矩,代码中加入详细的注释,相信没有什么问题。赶快运行点击按钮,去播放mms://mediasrv2.iptv.xmg.com.cn/yinyue频道下边的实时音频信息吧~

    PS:您的网络最好好一点,在网络较差的时候,可能找不到这个频道。网络较好是没有问题的。


    喜欢的朋友可以关注我哦,不定期更新简单有趣的安卓小文~

  • 相关阅读:
    高级特性(4)- 数据库编程
    UVA Jin Ge Jin Qu hao 12563
    UVA 116 Unidirectional TSP
    HDU 2224 The shortest path
    poj 2677 Tour
    【算法学习】双调欧几里得旅行商问题(动态规划)
    南洋理工大学 ACM 在线评测系统 矩形嵌套
    UVA The Tower of Babylon
    uva A Spy in the Metro(洛谷 P2583 地铁间谍)
    洛谷 P1095 守望者的逃离
  • 原文地址:https://www.cnblogs.com/wanghang/p/6299511.html
Copyright © 2011-2022 走看看