在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:您的网络最好好一点,在网络较差的时候,可能找不到这个频道。网络较好是没有问题的。

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

Android简易实战教程--第四十一话《vitamio网络收音机》的更多相关文章

  1. Android简易实战教程--第一话《最简单的计算器》

    转载请注明出处:http://blog.csdn.net/qq_32059827/article/details/51707931 从今天开始,本专栏持续更新Android简易实战类博客文章.和以往专 ...

  2. Android简易实战教程--第九话《短信备份~二》

    这一篇,承接地八话.使用高效的方式备份短信--xml序列化器. 存储短信,要以对象的方式存储.首先创建javabean: package com.itydl.createxml.domain; pub ...

  3. Android简易实战教程--第二话《两种进度条》

    点击按钮模拟进度条下载进度,"下载"完成进度条消失. 代码如下: xml: <?xml version="1.0" encoding="utf- ...

  4. Android简易实战教程--第五十话《动画扫描》

    祝新年快乐!2017(一起)前行. 转载博客请注明出处:道龙的博客 本篇简答的小案例,使用动画知识,完成一个类似雷达扫描效果,并且加入自定义进度条.对于自定义进度条前面有很详细的解析和案例了,本篇就结 ...

  5. Android简易实战教程--第十六话《SharedPreferences保存用户名和密码》

    之前在Android简易实战教程--第七话<在内存中存储用户名和密码> 那里是把用户名和密码保存到了内存中,这一篇把用户名和密码保存至SharedPreferences文件.为了引起误导, ...

  6. Android简易实战教程--第五十一话《使用Handler实现增加、减少、暂停计数》

    转载博客请注明出处:道龙的博客 之前,写过一篇使用异步任务AysncTask实现倒计时的小案例,喜欢的话可以参考博客:Android简易实战教程--第三十三话< AsyncTask异步倒计时&g ...

  7. Android简易实战教程--第四十八话《Android - Timer、TimerTask和Handler实现倒计时》

    之前本专栏文章中的小案例有写到:第三十九话<Chronometer实现倒计时> 以及使用异步实现倒计时:第三十三话< AsyncTask异步倒计时> 本篇文章 结合Timer. ...

  8. Android简易实战教程--第四十六话《RecyclerView竖向和横向滚动》

    Android5.X后,引入了RecyclerView,这个控件使用起来非常的方便,不但可以完成listView的效果,而且还可以实现ListView无法实现的效果.当然,在新能方便也做了大大的提高. ...

  9. Android简易实战教程--第三十六话《电话录音》

    今天完成一个简单的电话录音功能,即接通电话后,立即录下自己打电话的声音.实现起来比较简单:一个服务,一个TelephonyManager.一个MediaRecorder就够了. 1.布局提供一个开启录 ...

随机推荐

  1. 学习HTML的第三次课

    浏览器的地址栏中有字数限制,大约为200个字符. 1.表单:<form action="" method=""></form> 属性: ...

  2. 机器学习基石:02 Learning to Answer Yes/No

    Perceptron Learning Algorithm 感知器算法, 本质是二元线性分类算法,即用一条线/一个面/一个超平面将1,2维/3维/4维及以上数据集根据标签的不同一分为二. 算法确定后, ...

  3. luogu2252 取石子游戏

    题目描述 有两堆石子,数量任意,可以不同.游戏开始由两个人轮流取石子.游戏规定,每次有两种不同的取法,一是可以在任意的一堆中取走任意多的石子:二是可以在两堆中同时取走相同数量的石子.最后把石子全部取完 ...

  4. codeforces Gym - 100633J Ceizenpok’s formula

    拓展Lucas #include<cstdio> #include<cstdlib> #include<algorithm> #include<cstring ...

  5. Codeforces 802L Send the Fool Further! (hard)

    Description 题面 题目大意:求从根节点出发,每次随机走一个相邻的点,问走到任意一个叶子节点经过的路径长度的期望(走到就停止) Solution 树上高斯消元,复杂度是 \(O(n)\) 的 ...

  6. 网络编程基础API

    1.预备知识 网络字节序 1.TCP/IP协议规定,网络数据流应采用大端字节序 0x12345678 小端存储:78存储在低地址 大端存储:12存储在低地址 网络字节序和主机字节序的转换 #inclu ...

  7. hdu 5700区间交(线段树)

    区间交 Time Limit: 8000/4000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submiss ...

  8. poj2449 (第k条最短路)

    题意:求n个点中,a到b的第k条最短路 思路: 用最短路求出估价函数的h,再在搜索过程中记录g,利用A*求出 最开始想到的便是A*和最短路,但是脑子抽了,居然一个一个去求- -,TL了后才发现可以倒着 ...

  9. [bzoj省选十连测推广赛2]T2七彩树

    抄自:http://blog.csdn.net/coldef/article/details/61412577 当时看了就不会,看了别人的题解不懂怎么维护,最后抄了个代码....... 给定一棵n个点 ...

  10. 在confluence中出现Handshake failed due to invalid Upgrade header: null

    在confluence中出现Handshake failed due to invalid Upgrade header: null 昨天晚上同事说confluence写完日志保存不了,然后我登陆co ...