`
malong26
  • 浏览: 168573 次
  • 性别: 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那个团队开发的

相关推荐

    Android网络收音机项目源码

    链接mms流媒体协议的播放器,代码源自http://www.eoeandroid.com/forum.php?mod=viewthread&tid=179089&extra=page%3D1&page=1,还需要在手机中安装一个Vitamio插件才能运行,可从360中搜索Vitamio软件安装。

    android调频收音机源码

    通过分析这个"android调频收音机源码",开发者可以学习到Android音频处理、硬件交互、用户界面设计以及系统级服务的运用等多方面的知识,并能将其应用于实际项目中,提升自己的Android开发能力。

    网络收音机

    【网络收音机】 网络收音机是一种利用互联网技术接收并播放广播电台的设备或应用程序。与传统的无线电相比,网络收音机不受...通过不断迭代和优化,可以将这个初期项目扩展为功能完备、用户体验优秀的网络收音机应用。

    NetRadioDemo网络收音机demo 代码

    【NetRadioDemo网络收音机demo 代码】是一款用于演示如何实现网络收音机功能的应用程序源码。这个项目可能是用编程语言如Java、C#或Python等编写的,适用于移动设备(如Android或iOS)或者桌面平台。通过分析这个...

    收音机源码

    【标题】"收音机源码"所涉及的知识点主要集中在软件开发,特别是移动设备上的应用开发,这里主要指的是Android平台。源码是程序的原始代码,是开发者编写的应用程序的详细指令,允许用户深入理解软件的工作原理并...

    收音机Library.rar

    5. **网络广播**:现代收音机应用还可能包含流媒体功能,允许用户收听在线广播。这需要HTTP或HTTPS协议的支持,以及适应不同音频流格式(如MP3、AAC等)的处理。 6. **用户界面设计**:提供良好的用户体验是关键,...

    Android 使用Vitamio打造自己的万能播放器(1)——准备

    3. **Android网络收音机项目**:可能包含有关网络媒体播放的示例和教程。 在后续的章节中,我们将详细介绍如何集成Vitamio到Android项目中,配置和使用它的API,以及如何实现上述功能目标。通过Vitamio,开发者可以...

    美观的FM收音机界面

    总的来说,"美观的FM收音机界面"项目展示了如何利用Android的布局管理系统和自适应设计原则,创建出一个既美观又能在不同设备上良好运行的用户界面。通过深入理解并实践这些知识点,开发者可以构建出高质量的移动...

    Android Online Radio v8.0 在线播放应用程序收听现场广播 Android Studio JAVA项目源码

    高清录音机收音机 支持mp3,m3u,m3u8,pls流 支持mp3和aac类型流 自动停止收音机功能自动停止流媒体 播放/播放/停止/下一个/上一个在线广播流 清除缓存选项用于清除缓存 使用电子邮件/Google登录 支持Dark Mode 3...

    udoo-radio:我尝试在旧 Tandberg 收音机中安装 UDOO 的个人项目

    该项目名为“udoo-radio”,旨在将UDOO(一种基于ARM架构的微型电脑)嵌入到一台经典的Tandberg收音机中,以实现对其的现代化改造和远程操控功能。UDOO是一款强大的开发板,适合DIY爱好者和专业人士用于各种创新项目...

    Android项目设计与开发:广播的概念.ppt

    概念 广播接收器:就像收音机,需要经过调频接收某个频道信息一样,Android需要接收器来获取广播信息,而接收器的过滤就相当于“调频”。 概念 广播分标准广播和有序广播两种形式。 概念 标准广播源 接收器A 接收器...

    NetThrottle:无根地节制那些讨厌的收音机和传感器!

    总结来说,NetThrottle是一个使用Kotlin语言开发的Android应用,它提供了一种无需root权限的方式来管理和限制设备上的网络使用,特别是针对特定的收音机(可能是指网络连接模块)和传感器。其背后的技术可能包括...

    双频模块2.4G+5G+FM+BT

    总之,标题和内容所提供的信息指出了这款双频模块的多个重要方面,包括其对Android开发者的适用性、WiFi和蓝牙技术的集成、FM收音机功能以及模块的技术规范和性能指标。这些信息为Android设备的无线通信开发提供了...

    network-amplifier:树莓派家用功放升级项目。 通过PT2314(4通道输入音频处理器)的内部i2c控制启用网络

    安装的模块:音频-PT2314 i2c放大器混音器收音机-si4703 FM调谐器,通过i2c MP3控制-本地6600连接到mpd守护程序Lirc-用于IR远程控制的lirc守护程序通过HTTP的html / HTML / CSS / Javascript前端控制器。...

    AlarmPadRadioExtension:这是 AlarmPad android 应用程序的无线电扩展

    AlarmPadRadioExtension 是一款专为AlarmPad安卓应用程序设计的无线电扩展模块,旨在为用户提供一种全新的唤醒体验——通过甜美的收音机声音开始新的一天。这款扩展是AlarmPad应用功能的补充,通过集成广播接收器...

    FM电台源码.rar

    1. **信号捕获**:这部分负责从硬件设备(如FM收音机模块或内置调谐器)接收射频信号,并将其转化为数字信号。 2. **解调**:解调器将接收到的调频信号还原为音频信号,这通常涉及到傅里叶变换和其他数字信号处理...

    树莓派入门指南.pdf

    - **个人项目**:被用于创建各种创新项目,比如便携式电脑、网络存储设备(NAS)、游戏主机、网络收音机、安全监控系统等。 - **物联网应用**:可以作为物联网项目的中心控制单元,实现家居自动化等功能。 #### 四...

Global site tag (gtag.js) - Google Analytics