登录 立即注册
安币:

安卓巴士 - 安卓开发 - Android开发 - 安卓 - 移动互联网门户

查看: 320|回复: 5

Android App中使用AudioManager类来编写音频播放器,audiomanager.stream

[复制链接]

434

主题

843

帖子

491

安币

手工艺人

发表于 2018-1-11 15:51:46 | 显示全部楼层 |阅读模式

        手机都有声音模式,声音、静音还有震动,甚至震动加声音兼备,这些都是手机的基本功能。在android手机中,我们同样可以通过android的sdk提供的声音管理接口来管理手机声音模式以及调整声音大小,这就是android中audiomanager的使用。
audiomanager 类位于 android.media 包中,该类提供访问控制音量和钤声模式的操作

以下分别是audiomanager设置声音模式和调整声音大小的方法。


如何获取声音管理器:

[Java] 查看源文件 复制代码
audiomanager audiomanager = (audiomanager) getsystemservice(audio_service);

        
里面主要的方法:
a、设置声音模式

[Java] 查看源文件 复制代码
//声音模式 
audiomanager.setringermode(audiomanager.ringer_mode_normal);
//静音模式 
audiomanager.setringermode(audiomanager.ringer_mode_silent);
//震动模式 
audiomanager.setringermode(audiomanager.ringer_mode_vibrate);

        
b、调整声音大小

[Java] 查看源文件 复制代码
//减少声音音量 
audiomanager.adjustvolume(audiomanager.adjust_lower, 0);
//调大声音音量 
audiomanager.adjustvolume(audiomanager.adjust_raise, 0);
(当传入的第一个参数为 audiomanager.adjust_lower 时,可将音量调小一个单位,传入 audiomanager.adjust_raise 时,则可以将音量调大一个单位。)

        c、getmode()获取音频模式
d、getringermode()获取铃声震动模式

[Java] 查看源文件 复制代码
public void setstreammute (int streamtype, boolean state)

        
静音或不静音音频流:
静音命令被保护以免客户端进程死亡:若具有流上的活动静音请求的进程死亡,这个流会自动取消静音。
对于给定的流,静音请求是累计的:audiomanager会从一个或多个客户端接收数个静音请求,只有当接收到相同数目的取消静音请求时流才会取消静音。
为了更好的用户体验,应该程序必须在onpause()中取消已静音流,若合适在onresume()中再次静音

这个方法只能用于代替音频设置的平台范围管理应用程序或主要电话应用程序。

        调用示例:

[Java] 查看源文件 复制代码
import android.app.activity; 
import android.app.service; 
import android.media.audiomanager; 
import android.media.mediaplayer; 
import android.os.bundle; 
import android.view.view; 
import android.view.view.onclicklistener; 
import android.widget.button; 
import android.widget.compoundbutton; 
import android.widget.compoundbutton.oncheckedchangelistener; 
import android.widget.togglebutton; 
 
public class autoactivity extends activity { 
  button play, up, down,stop; 
  togglebutton mute; 
  audiomanager amanager; 
  mediaplayer mplayer; 
  boolean flag = true; 
 
  @override 
  protected void oncreate(bundle savedinstancestate) { 
    super.oncreate(savedinstancestate); 
    setcontentview(r.layout.activity_auto); 
 
    amanager = (audiomanager) getsystemservice(service.audio_service); 
    play = (button) findviewbyid(r.id.playbtn); 
    up = (button) findviewbyid(r.id.upbtn); 
    down = (button) findviewbyid(r.id.downbtn); 
    stop = (button) findviewbyid(r.id.stopbtn); 
    mute = (togglebutton) findviewbyid(r.id.silencebtn); 
    // 初始化mediaplayer对象,准备播放音乐 
    mplayer = mediaplayer.create(autoactivity.this, 
        r.raw.love); 
 
    play.setonclicklistener(new onclicklistener() { 
      //音乐播放和暂停 
      @override 
      public void onclick(view v) { 
         
        // 设置循环播放 
        if(flag) { 
          play.settext("暂停"); 
          mplayer.setlooping(true);//音乐的循环播放 
          mplayer.start(); 
          flag = false; 
        }else { 
          play.settext("播放"); 
          mplayer.pause(); 
          flag = true; 
        } 
      } 
    }); 
    up.setonclicklistener(new onclicklistener() { 
      //提高音量 
      @override 
      public void onclick(view v) { 
        // 指定调节音乐的音频,增大音量,而现实音量图形示意 
        amanager.adjuststreamvolume(audiomanager.stream_music, 
            audiomanager.adjust_raise, audiomanager.flag_show_ui); 
      } 
    }); 
    down.setonclicklistener(new onclicklistener() { 
      //降低音量 
      @override 
      public void onclick(view v) { 
        // 指定调节音乐的音频,降低音量,而现实音量图形示意 
        amanager.adjuststreamvolume(audiomanager.stream_music, 
            audiomanager.adjust_lower, audiomanager.flag_show_ui); 
      } 
    }); 
    stop.setonclicklistener(new onclicklistener() { 
      //停止音乐 
      @override 
      public void onclick(view v) { 
        mplayer.stop(); 
        play.settext("播放"); 
        flag = true; 
        mplayer = mediaplayer.create(autoactivity.this, 
            r.raw.love); 
      } 
    }); 
    mute.setoncheckedchangelistener(new oncheckedchangelistener() { 
      //静音功能 
      @override 
      public void oncheckedchanged(compoundbutton buttonview, boolean ischecked) { 
        amanager.setstreammute(audiomanager.stream_music, ischecked); 
      } 
    }); 
  } 
 
} 

        界面布局文件,activity_auto.xml

[Java] 查看源文件 复制代码
<linearlayout xmlns:android="http://schemas.android.com/apk/res/android" 
  android:layout_width="fill_parent" 
  android:layout_height="wrap_content" > 
 
  <tablelayout 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:layout_margintop="360dp" > 
 
    <tablerow> 
 
      <button 
        android:id="@+id/playbtn" 
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content" 
        android:layout_weight="1" 
        android:text="播放" /> 
 
      <button 
        android:id="@+id/stopbtn" 
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content" 
        android:layout_weight="1" 
        android:text="停止" /> 
    </tablerow> 
 
    <tablerow> 
 
      <button 
        android:id="@+id/upbtn" 
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content" 
        android:layout_weight="1" 
        android:text="vol+" /> 
 
      <button 
        android:id="@+id/downbtn" 
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content" 
        android:layout_weight="1" 
        android:text="vol-" /> 
 
      <togglebutton 
        android:id="@+id/silencebtn" 
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content" 
        android:layout_weight="1" 
        android:text="静音" 
        android:textcolor="#ff0000" /> 
    </tablerow> 
  </tablelayout> 
 
</linearlayout> 

        程序比较简单,只有几个简单的功能按钮,但是理解用法用该够了~

        mediaplayer的使用方式和方法,具体来看:
1)如何获得mediaplayer实例:
可以使用直接new的方式:

[Java] 查看源文件 复制代码
  mediaplayer mp = new mediaplayer();

         也可以使用create的方式,如:

[Java] 查看源文件 复制代码
mediaplayer mp = mediaplayer.create(this, r.raw.test);//这时就不用调用setdatasource了

        
2) 如何设置要播放的文件:
mediaplayer要播放的文件主要包括3个来源:
a. 用户在应用中事先自带的resource资源
例如:

[Java] 查看源文件 复制代码
mediaplayer.create(this, r.raw.test);

        b. 存储在sd卡或其他文件路径下的媒体文件
例如:

[Java] 查看源文件 复制代码
mp.setdatasource("/sdcard/test.mp3");

        c. 网络上的媒体文件
例如:

[Java] 查看源文件 复制代码
mp.setdatasource("http://www.citynorth.cn/music/confucius.mp3");

        
mediaplayer的setdatasource一共四个方法:



  

    1. setdatasource (string path)


  

    2. setdatasource (filedescriptor fd)


  

    3. setdatasource (context context, uri uri)


  

    4.  setdatasource (filedescriptor fd, long offset, long length)



0

主题

9563

帖子

1620

安币

Android大神

IT

Rank: 6Rank: 6

发表于 2018-1-13 02:44:05 | 显示全部楼层
感觉楼主很用心,辛苦啦~

465

主题

9644

帖子

827

安币

代码手工艺人

Rank: 4

发表于 2018-1-14 04:45:48 | 显示全部楼层
支持,感谢,祝巴士越来越好~

28

主题

1万

帖子

1386

安币

Android大神

小白

Rank: 6Rank: 6

发表于 2018-1-14 21:33:05 | 显示全部楼层
支持,感谢,祝巴士越来越好~

21

主题

9219

帖子

2063

安币

Android大神

Rank: 6Rank: 6

发表于 2018-1-15 09:34:58 | 显示全部楼层
支持楼主,支持安卓巴士!

1

主题

8944

帖子

2924

安币

Android大神

Rank: 6Rank: 6

发表于 2018-1-15 19:51:24 | 显示全部楼层
感谢分享,楼主V5~
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

站长推荐

通过邮件订阅最新安卓weekly信息
上一条 /4 下一条

下载安卓巴士客户端

全国最大的安卓开发者社区
联系我们
关闭
合作电话:
15618560077
Email:
805941275@qq.com
商务市场合作/投稿
问题反馈及帮助
联系我们

广告投放| 下载客户端|申请友链|手机版|站点统计|安卓巴士 ( 粤ICP备15117877号 )

快速回复 返回顶部 返回列表