zoukankan      html  css  js  c++  java
  • [Android实例] 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文件

    1. <?xml version="1.0" encoding="utf-8"?
    2. <manifest xmlns:android="[url=http://schemas.android.com/apk/res/android]http://schemas.android.com/apk/res/android[/url]"
    3. package="com.netradiodemo"
    4. android:versionCode="1"
    5. android:versionName="1.0">
    6. <uses-sdk android:minSdkVersion="10" />
    7. <uses-permission android:name="android.permission.INTERNET"></uses-permission> 
    8. <application android:icon="@drawable/icon" android:label="@string/app_name"
    9. android:theme="@android:style/Theme.Black">
    10. <activity android:name=".NetRadioDemoActivity" 
    11. android:label="@string/app_name">
    12. <intent-filter> 
    13. <action android:name="android.intent.action.MAIN" />
    14. <category android:name="android.intent.category.LAUNCHER" />
    15. </intent-filter>
    16. </activity>
    17. <activity android:name=".compnents.PlayerActivity"></activity> 
    18. </application>
    19. </manifest>
    复制代码

    主页面布局文件main未修改,播放页面布局文件如下play_page

    1. <?xml version="1.0" encoding="utf-8"?>
    2. <LinearLayout xmlns:android="[url=http://schemas.android.com/apk/res/android]http://schemas.android.com/apk/res/android[/url]"
    3. android:orientation="vertical" 
    4. android:layout_width="fill_parent"
    5. android:layout_height="fill_parent" 
    6. >
    7. <Button 
    8. android:id="@+id/btn_start"
    9. android:layout_gravity="center_horizontal"
    10. android:layout_width="match_parent" 
    11. android:layout_height="wrap_content" 
    12. android:text="听猫扑" 
    13. android:textSize="30sp" 
    14. android:onClick="doStart" 
    15. />
    16. <Button 
    17. android:id="@+id/btn_stop"
    18. android:layout_gravity="center_horizontal"
    19. android:layout_width="match_parent"
    20. android:layout_height="wrap_content"
    21. android:text="不听猫扑"
    22. android:textSize="30sp"
    23. android:onClick="doStop"
    24. />
    25. </LinearLayout>
    复制代码


    第一个activity代码,主要负责检查插件NetRadioDemoActivity 
    Java代码

    1. package com.netradiodemo;
    2. import io.vov.vitamio.VitamioInstaller;
    3. import io.vov.vitamio.VitamioInstaller.VitamioNotCompatibleException;
    4. import io.vov.vitamio.VitamioInstaller.VitamioNotFoundException;
    5. import android.app.Activity;
    6. import android.content.Intent; 
    7. import android.os.Bundle; 
    8. import android.util.Log; 
    9. import android.view.View;
    10. import android.view.View.OnClickListener;
    11. import android.widget.Button;
    12. import android.widget.LinearLayout.LayoutParams;
    13. import android.widget.TextView;
    14. import android.widget.Toast;
    15. import com.netradiodemo.compnents.PlayerActivity;
    16. public class NetRadioDemoActivity extends Activity {
    17. Intent intent ;
    18. @Override
    19. public void onCreate(Bundle savedInstanceState) {
    20. super.onCreate(savedInstanceState);
    21. setContentView(R.layout.main);
    22. intent = new Intent(this, PlayerActivity.class);
    23. TextView tvCheck = new TextView(this);
    24. tvCheck.setText("使用前请检查是否安装了Vitamio插件:");
    25. this.addContentView(tvCheck, new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));
    26. Button btnCheck = new Button(this);
    27. btnCheck.setText("检查");
    28. btnCheck.setOnClickListener(new OnClickListener() {
    29. @Override
    30. public void onClick(View arg0) {
    31. try {
    32. String isInstallerString = VitamioInstaller.checkVitamioInstallation(NetRadioDemoActivity.this);//检查插件是否安装成功,这里是一个费时操作,应该启新线程处理,作为一个demo我就不做了
    33. Log.i("tag",isInstallerString); //插件安装成功后,Log中显示插件名称
    34. if(isInstallerString!=null){
    35. Toast.makeText(NetRadioDemoActivity.this, "已安装正确版本Vitamio!", Toast.LENGTH_LONG).show();        
    36. startActivity(intent);//开启收听界面
    37. }else{
    38. Toast.makeText(NetRadioDemoActivity.this, "没有匹配的Vitamio!", Toast.LENGTH_LONG).show();
    39. finish();//没有插件安装失败,则结束程序
    40. }
    41. } catch (VitamioNotCompatibleException e) {
    42. e.printStackTrace(); 
    43. } catch (VitamioNotFoundException e) {
    44. e.printStackTrace(); 
    45. }
    46. }); 
    47. this.addContentView(btnCheck, new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
    48. }
    49. }
    复制代码

    第二个activity,主要负责播放PlayerActivity

    1. package com.netradiodemo.compnents;
    2. import io.vov.vitamio.MediaPlayer;
    3. import io.vov.vitamio.VitamioInstaller.VitamioNotCompatibleException;
    4. import io.vov.vitamio.VitamioInstaller.VitamioNotFoundException;
    5. import io.vov.vitamio.widget.MediaController;
    6. import java.io.IOException;
    7. import android.app.Activity;
    8. import android.os.Bundle;
    9. import android.view.View;
    10. import android.widget.LinearLayout.LayoutParams;
    11. import com.netradiodemo.R;
    12. public class PlayerActivity extends Activity {
    13. MediaPlayer mPlayer;
    14. @Override
    15. protected void onCreate(Bundle savedInstanceState) {
    16. setContentView(R.layout.play_page);
    17. MediaController controller = new MediaController(this);//创建控制对象
    18. this.addContentView(controller, new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
    19. String path = "mms://ting.mop.com/mopradio";//猫扑电台地址,这里可以添加自己的喜欢的电台地址,mms协议的
    20. try {
    21. mPlayer = new MediaPlayer(this);//播放流媒体的对象
    22. mPlayer.setDataSource(path);//设置流媒体的数据源
    23. mPlayer.prepare();
    24. } catch (VitamioNotCompatibleException e) {
    25. e.printStackTrace();
    26. } catch (VitamioNotFoundException e) {
    27. e.printStackTrace();
    28. } catch (IllegalArgumentException e) {
    29. e.printStackTrace();
    30. } catch (IllegalStateException e) {
    31. e.printStackTrace();
    32. } catch (IOException e) {
    33. e.printStackTrace();
    34. }
    35. super.onCreate(savedInstanceState);
    36. }
    37. public void doStart(View view){
    38. mPlayer.start();//开始播放
    39. }
    40. public void doStop(View view){
    41. mPlayer.stop();//停止播放
    42. }
    43. }
    复制代码

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

  • 相关阅读:
    8.17HTML 标签
    二进制,八进制,十六进制
    keil5之32环境配置
    初遇stm32
    python与opencv的结合之人脸识别值
    01_什么是数据结构以及C语言指针回顾
    07_SSH免登录配置
    06_Linux系统常用命令
    05_Linux网络配置及CRT远程
    04_VMware虚拟机网络配置
  • 原文地址:https://www.cnblogs.com/mochaMM/p/5151026.html
Copyright © 2011-2022 走看看