`
malong26
  • 浏览: 167037 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Android网络收音机项目

 
阅读更多
    最近喜欢听广播,但是搜索了一下,苦于网上没有android的网络收音机项目的例子,于是自己动手实现了Android网络收音机项目。
    前言,由于很多网络广播使用的协议是mms,来自微软,但是android并不支持这种流媒体协议,我的解决办法是使用Vitamio插件+Vitamio库的方式解决。这样在安装app本身的apk同时还要安装对应你手机的Vitamio插件,这个插件是老外开发的还免费,支持很多媒体格式,安上一个也挺好的,大概3M多。有一点要注意的是这个插件跟硬件有关,所以...所以如果你可以一个一个的试,看哪个适应你的手机硬件,这个插件有4个版本:
       ARMv6: for some low end devices (Market, VOV)
       VFP: for some low end devices with VFP support (Market, VOV)
       ARMv7: for ARMv7 devices without NEON support, such as Tegra 2 powered  devices(Market, VOV)
       NEON: for ARMv7 devices with NEON support (Market, VOV)
具体可以上http://vov.io/vitamio/看一下,我的烂手机是VFP这个版本的。
    开始前的准备,你最好在上面的官网上下载一份API看看:Vitamio-SDK.7z。SDK里面还有vitamio.jar这个jar文件,里面有流媒体的控制类。OK废话不多说,上代码(导jar包相信大家都了然,这里不作介绍):

AndroidManifest文件
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.netradiodemo"
      android:versionCode="1"
      android:versionName="1.0">
    <uses-sdk android:minSdkVersion="10" />
    <uses-permission android:name="android.permission.INTERNET"></uses-permission>

    <application android:icon="@drawable/icon" android:label="@string/app_name"
     android:theme="@android:style/Theme.Black">
        <activity android:name=".NetRadioDemoActivity"
                  android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
	<activity android:name=".compnents.PlayerActivity"></activity>
    </application>
</manifest>


主页面布局文件main未修改,播放页面布局文件如下play_page
<?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"
    >
<Button  
    android:id="@+id/btn_start"
    android:layout_gravity="center_horizontal"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="听猫扑"
    android:textSize="30sp"
    android:onClick="doStart"
    />
    <Button  
    android:id="@+id/btn_stop"
    android:layout_gravity="center_horizontal"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="不听猫扑"
    android:textSize="30sp"
    android:onClick="doStop"
    />
</LinearLayout>


第一个activity代码,主要负责检查插件NetRadioDemoActivity
package com.netradiodemo;

import io.vov.vitamio.VitamioInstaller;
import io.vov.vitamio.VitamioInstaller.VitamioNotCompatibleException;
import io.vov.vitamio.VitamioInstaller.VitamioNotFoundException;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.LinearLayout.LayoutParams;
import android.widget.TextView;
import android.widget.Toast;
import com.netradiodemo.compnents.PlayerActivity;

public class NetRadioDemoActivity extends Activity {
	Intent intent ;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        intent = new Intent(this, PlayerActivity.class);
        TextView tvCheck = new TextView(this);
        tvCheck.setText("使用前请检查是否安装了Vitamio插件:");
        this.addContentView(tvCheck, new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));
        
        Button btnCheck = new Button(this);
        btnCheck.setText("检查");
        btnCheck.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View arg0) {
				try {
					String isInstallerString = VitamioInstaller
							.checkVitamioInstallation(NetRadioDemoActivity.this);//检查插件是否安装成功,这里是一个费时操作,应该启新线程处理,作为一个demo我就不做了
					Log.i("tag",isInstallerString); //插件安装成功后,Log中显示插件名称
					if(isInstallerString!=null){
						Toast.makeText(NetRadioDemoActivity.this, "已安装正确版本Vitamio!", Toast.LENGTH_LONG).show();	
						startActivity(intent);//开启收听界面
					}else{
						Toast.makeText(NetRadioDemoActivity.this, "没有匹配的Vitamio!", Toast.LENGTH_LONG).show();
					    finish();//没有插件安装失败,则结束程序
					}
				} catch (VitamioNotCompatibleException e) {
					e.printStackTrace();
				} catch (VitamioNotFoundException e) {
					e.printStackTrace();
				}
			}
		});
        this.addContentView(btnCheck, new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
    }
}


第二个activity,主要负责播放PlayerActivity
package com.netradiodemo.compnents;

import io.vov.vitamio.MediaPlayer;
import io.vov.vitamio.VitamioInstaller.VitamioNotCompatibleException;
import io.vov.vitamio.VitamioInstaller.VitamioNotFoundException;
import io.vov.vitamio.widget.MediaController;
import java.io.IOException;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.LinearLayout.LayoutParams;

import com.netradiodemo.R;

public class PlayerActivity extends Activity {
	MediaPlayer mPlayer;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		setContentView(R.layout.play_page);
		MediaController controller = new MediaController(this);//创建控制对象
		this.addContentView(controller, new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
		String path = "mms://ting.mop.com/mopradio";//猫扑电台地址,这里可以添加自己的喜欢的电台地址,mms协议的
		try {
			mPlayer = new MediaPlayer(this);//播放流媒体的对象
			mPlayer.setDataSource(path);//设置流媒体的数据源
			mPlayer.prepare();
		} catch (VitamioNotCompatibleException e) {
			e.printStackTrace();
		} catch (VitamioNotFoundException e) {
			e.printStackTrace();
		} catch (IllegalArgumentException e) {
			e.printStackTrace();
		} catch (IllegalStateException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		super.onCreate(savedInstanceState);
	}
	
	public void doStart(View view){
		mPlayer.start();//开始播放
	}
	public void doStop(View view){
		mPlayer.stop();//停止播放
	}
	
}


OK,完成,猫扑电台悦耳的声音从我的手机里播放出来啦。





  • 大小: 4.6 KB
分享到:
评论
17 楼 u013061116 2014-07-14  
连你自己都调试不出来的玩意
16 楼 Dodeechen1990 2013-05-31  

运行时 出现错误:java.lang.VerifyError
是哪里错了呢?

恳请楼主回复。非常感谢
15 楼 Dodeechen1990 2013-05-31  

运行时 出现错误:java.lang.VerifyError
是哪里错了呢?

恳请楼主回复。非常感谢
14 楼 Dodeechen1990 2013-05-31  

运行时 出现错误:java.lang.VerifyError
是哪里错了呢?

恳请楼主回复。非常感谢
13 楼 malong26 2013-03-22  
ciazzp 写道
楼主,可以发一个完整的例子吗,真的找不到里面的包,要报错.
非常非常感谢~~~~~
54fbj@163.com


在这个网站找一下vitamio,这个是一个开源项目。楼主我真心找不到程序了,好久之前的东东了,爱莫能助呀
12 楼 ciazzp 2013-03-21  
楼主,可以发一个完整的例子吗,真的找不到里面的包,要报错.
非常非常感谢~~~~~
54fbj@163.com
11 楼 ciazzp 2013-03-21  
import io.vov.vitamio.widget.MediaController;

这个包在哪下载?
10 楼 二冲2010 2012-06-29  
malong26 写道
二冲2010 写道
不用网络的收音机 如何实现 愿请教

这种收信号的都是rom自带的,没有实现必要吧?

也是 ,只是想知道是怎么写出来的  需要JNI 想知道这样的软件一般是怎么开发出来的
9 楼 apps 2012-06-25  
收藏文章很好听
8 楼 malong26 2012-06-25  
二冲2010 写道
不用网络的收音机 如何实现 愿请教

这种收信号的都是rom自带的,没有实现必要吧?
7 楼 二冲2010 2012-06-24  
不用网络的收音机 如何实现 愿请教
6 楼 shaobin0604 2012-05-07  
malong26 写道
shaobin0604 写道
shaobin0604 写道
malong26 写道
shaobin0604 写道
貌似是VPlayer那个团队开发的

这个倒不知道,但是如果用这个做成一个项目的太麻烦,需要处理两个问题:1,根据不同硬件需要集成不同的插件;2,完成apk的静默安装

1. 没必要集成不同的插件,用 armv5 的就行了。
2. 为什么要静默安装。

抱歉,没仔细看你的帖子,貌似这个项目没有提供 arm v5 的插件。


arm v5?可以支持所有arm核心的硬件?包括arm7,9,cotex?我只是做了这么个小例子就没再研究了。
静默安装给用户的体验会更好些,很多人问这个静默安装的问题,网上有一些答案,答案给我的感觉就是,静默安装可能性不大,安全性太差

1. 编译armv5的版本只会使用基本的指令集,应该是可以支持所有arm核心的CPU。
2. SDK没有提供实现静默安装的方法,如果能实现也可能是利用了系统的漏洞。
5 楼 malong26 2012-05-03  
shaobin0604 写道
shaobin0604 写道
malong26 写道
shaobin0604 写道
貌似是VPlayer那个团队开发的

这个倒不知道,但是如果用这个做成一个项目的太麻烦,需要处理两个问题:1,根据不同硬件需要集成不同的插件;2,完成apk的静默安装

1. 没必要集成不同的插件,用 armv5 的就行了。
2. 为什么要静默安装。

抱歉,没仔细看你的帖子,貌似这个项目没有提供 arm v5 的插件。


arm v5?可以支持所有arm核心的硬件?包括arm7,9,cotex?我只是做了这么个小例子就没再研究了。
静默安装给用户的体验会更好些,很多人问这个静默安装的问题,网上有一些答案,答案给我的感觉就是,静默安装可能性不大,安全性太差
4 楼 shaobin0604 2012-05-03  
shaobin0604 写道
malong26 写道
shaobin0604 写道
貌似是VPlayer那个团队开发的

这个倒不知道,但是如果用这个做成一个项目的太麻烦,需要处理两个问题:1,根据不同硬件需要集成不同的插件;2,完成apk的静默安装

1. 没必要集成不同的插件,用 armv5 的就行了。
2. 为什么要静默安装。

抱歉,没仔细看你的帖子,貌似这个项目没有提供 arm v5 的插件。
3 楼 shaobin0604 2012-05-03  
malong26 写道
shaobin0604 写道
貌似是VPlayer那个团队开发的

这个倒不知道,但是如果用这个做成一个项目的太麻烦,需要处理两个问题:1,根据不同硬件需要集成不同的插件;2,完成apk的静默安装

1. 没必要集成不同的插件,用 armv5 的就行了。
2. 为什么要静默安装。
2 楼 malong26 2012-04-27  
shaobin0604 写道
貌似是VPlayer那个团队开发的

这个倒不知道,但是如果用这个做成一个项目的太麻烦,需要处理两个问题:1,根据不同硬件需要集成不同的插件;2,完成apk的静默安装
1 楼 shaobin0604 2012-04-27  
貌似是VPlayer那个团队开发的

相关推荐

Global site tag (gtag.js) - Google Analytics