`

Android学习12-----手机服务(1) 取得电池电量和声音服务:AudioManager

阅读更多

 

一、取得电池电量信息

         Android 系统中,专门提供了一个取得电池电量信息的 Action—ACTION_BATTERY_CHANGED ,在此 Action 中定义了许多附加信息,这些附加信息的名称及作用如下:

No.

附加信息

类型

备注

1

status

int

取得电池的状态,返回的状态类型由 android.os.BatteryManager 类定义的常量所决定,包括:

         ·电池充电状态( BATTERY_STATUS_CHARGING

         ·电池放电状态( BATTERY_STATUS_DISCHARGING

         ·电池满电状态( BATTERY_STATUS_FULL

         ·电池不充电状态( BATTERY_STATUS_NOT_CHARGING

         ·电池未知状态( BATTERY_STATUS_UNKNOWN

2

health

int

取得电池的健康状态,返回的状态类型由 android.os.BatteryManager 类定义的常量所决定,包括:

         ·电池损坏( BATTERY_HEALTH_DEAD

         ·电池健康( BATTERY_HEALTH_GOOD

         ·电池过热( BATTERY_HEALTH_OVERHEAT

         ·电池电压过大( BATTERY_HEALTH_OVER_VOLTAGE

         ·未知状态( BATTERY_HEALTH_UNKOWN

         ·未明示故障( BATTERY_HEALTH_UNSPECIFIED_FAILURE

3

present

boolean

判断当前是否存在电池

4

level

int

取得电池的剩余容量

5

scale

int

取得电池的总容量,通常为 100

6

Icon-small

int

取得电池对应的图标 ID

7

plugged

int

连接的电源插座累心,返回的状态由 android.os.BatteryManager 类定义的常量所决定,包括:

         · USB 电源( BATTERY_PLUGGED_USB

         ·交流电电源( BATTERY_PLUGGED_AC

8

voltage

int

取得电池的电压

9

temperature

int

取得电池的温度,单位是摄氏度

10

technology

String

取得电池的类型

 

范例:取得剩余电量

定义广播接受,显示电池电量, BatteryInfoBroadcastReceiver.java

package com.iflytek.demo;

import android.app.AlertDialog;
import android.app.Dialog;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;

public class BatteryInfoBroadcastReceiver extends BroadcastReceiver {// 广播接收器

	@Override
	public void onReceive(Context context, Intent intent) {// 接受广播
		if (Intent.ACTION_BATTERY_CHANGED.equals(intent.getAction())) {// 判断Action
			int level = intent.getIntExtra("level", 0);// 取得电池剩余容量
			int scale = intent.getIntExtra("scale", 100);// 取得电池总理
			Dialog dialog = new AlertDialog.Builder(context)// 创建对话框
					.setTitle("电池电量")// 设置标题
					.setMessage(
							"电池电量为:" + String.valueOf(level * 100 / scale)
									+ "%")// 设置信息
					.setNegativeButton("关闭",
							new DialogInterface.OnClickListener() {// 设置取消按钮
								@Override
								public void onClick(DialogInterface dialog,
										int which) {// 设置监听操作

								}
							}).create();// 创建Dialog
			dialog.show();// 显示对话框
		}
	}

}

 

 BatteryActivity.java

package com.iflytek.demo;

import android.app.Activity;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class BatteryActivity extends Activity {

	private Button but = null;

	/** Called when the activity is first created. */
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		super.setContentView(R.layout.main);
		this.but = (Button) super.findViewById(R.id.but);
		this.but.setOnClickListener(new OnClickListenerImpl());
	}

	private class OnClickListenerImpl implements OnClickListener {
		@Override
		public void onClick(View v) {
			BatteryInfoBroadcastReceiver receiver = new BatteryInfoBroadcastReceiver();
			IntentFilter filter = new IntentFilter(
					Intent.ACTION_BATTERY_CHANGED);
			BatteryActivity.this.registerReceiver(receiver, filter);
		}
	}

}
 

 

 

二、声音服务: AudioManager

         Android 系统中,为了满足用户操作声音功能的需要,专门提供了一个声音管理类 —android.media.AudioManager ,通过此类,可以实现手机音量的大小控制,或者进行静音、震动模式的切换。此类中所提供的常量及常用方法如下:

No.

常量及方法

描述

1

Public static final int RINGER_MODE_NORMAL

正常铃声模式

2

Public static final int RINGER_MODE_SILENT

静音模式

3

Public static final int RINGER_MODE_VIBRATE

震动模式

4

Public static final int STAREAM_ALARM

报警音

5

Public static final int STAREAM_MUSIC

播放音乐

6

Public static final int STAREAM_NOTIFICATION

播放提示

7

Public static final int STAREAM_RING

电话铃声

8

Public static final int STAREAM_VOICE_CALL

电话呼叫

9

Public static final int VIBRATE_SETTING_ON

打开震动

10

Public static final int VIBRATE_SETTING_ON

通知震动

11

Public static final int VIBRATE_TYPE_RINGER

电话响铃震动

12

Public static final int ADJUST_LOWER

电话音量调小一格

13

Public static final int ADJUST_RAISE

电话音量调大一格

14

Public int abandonAudioFocus(AudioManager.OnAudioFocusChangeListener l)

放弃声音的焦点并设置监听

15

Public String getParameters(String keys)

返回配置的指定参数内容

16

Public int getRingerMode()

取得响铃模式

17

Public void setParameters(String keyValuePairs)

设置响铃参数

18

Public void setRingerMode(int ringerMode)

设置响铃模式

19

Public void adjustVolume(int direction,int flags)

调节音量

20

Public int getStreamVolume(int streamType)

返回指定数据流的当前音量值

21

Public void setStreamVolume(int streamType,int index,int flags)

设置音频数据流

 

如果想取得 AudioManager 对象,则必须通过 getSystemService() 方法找到 Context.AUDIO_SERVICE 服务。

 

范例:完成设置手机铃声和音量的增加或减少

AudioManagerActivity.java

package com.iflytek.demo;

import android.app.Activity;
import android.content.Context;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ImageButton;
import android.widget.Toast;

public class AudioManagerActivity extends Activity {

	private ImageButton voiceOn = null;// 打开声音
	private ImageButton voiceOff = null;// 静音按钮
	private ImageButton voiceVibrate = null;// 震动按钮
	private ImageButton voiceLower = null;// 降低音量
	private ImageButton voiceRaise = null;// 调高音量
	private AudioManager audio = null;// 音量管理

	/** Called when the activity is first created. */
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		super.setContentView(R.layout.main);
		this.voiceOn = (ImageButton) super.findViewById(R.id.voiceon);
		this.voiceOff = (ImageButton) super.findViewById(R.id.voiceoff);
		this.voiceVibrate = (ImageButton) super.findViewById(R.id.voicevibrate);
		this.voiceLower = (ImageButton) super.findViewById(R.id.voicelower);
		this.voiceRaise = (ImageButton) super.findViewById(R.id.voiceraise);
		this.audio = (AudioManager) super
				.getSystemService(Context.AUDIO_SERVICE);// 取得服务
		this.voiceOn.setOnClickListener(new VoiceOnOnClickListenerImpl());
		this.voiceOff.setOnClickListener(new VoiceOffOnClickListenerImpl());
		this.voiceVibrate
				.setOnClickListener(new VoiceVibrateOnClickListenerImpl());
		this.voiceLower.setOnClickListener(new VoiceLowerOnClickListenerImpl());
		this.voiceRaise.setOnClickListener(new VoiceRaiseOnClickListenerImpl());
		this.playAudio();
	}

	/**
	 * @descrption 播放音乐
	 * @author xdwang
	 * @create 2012-11-05 下午8:55:38
	 */
	private void playAudio() {
		MediaPlayer media = MediaPlayer.create(this, R.raw.shiqisuideyuji);// 指定资源
		media.setLooping(true);// 循环播放
		try {
			media.prepare();// 预备状态
		} catch (Exception e) {
		}
		media.start();// 播放文件
	}

	private class VoiceOnOnClickListenerImpl implements OnClickListener {

		@Override
		public void onClick(View v) {
			AudioManagerActivity.this.audio
					.setRingerMode(AudioManager.RINGER_MODE_NORMAL);
			Toast.makeText(AudioManagerActivity.this, "手机音量开启!",
					Toast.LENGTH_SHORT).show();
		}

	}

	private class VoiceOffOnClickListenerImpl implements OnClickListener {

		@Override
		public void onClick(View v) {
			AudioManagerActivity.this.audio
					.setRingerMode(AudioManager.RINGER_MODE_SILENT);
			Toast.makeText(AudioManagerActivity.this, "手机静音!",
					Toast.LENGTH_SHORT).show();
		}

	}

	private class VoiceVibrateOnClickListenerImpl implements OnClickListener {

		@Override
		public void onClick(View v) {
			AudioManagerActivity.this.audio
					.setRingerMode(AudioManager.RINGER_MODE_VIBRATE);
			Toast.makeText(AudioManagerActivity.this, "手机为震动模式!",
					Toast.LENGTH_SHORT).show();
		}

	}

	private class VoiceLowerOnClickListenerImpl implements OnClickListener {

		@Override
		public void onClick(View v) {
			AudioManagerActivity.this.audio.adjustVolume(
					AudioManager.ADJUST_LOWER, 0);
			Toast.makeText(AudioManagerActivity.this, "音量减小!",
					Toast.LENGTH_SHORT).show();
		}

	}

	private class VoiceRaiseOnClickListenerImpl implements OnClickListener {

		@Override
		public void onClick(View v) {
			AudioManagerActivity.this.audio.adjustVolume(
					AudioManager.ADJUST_RAISE, 0);
			Toast.makeText(AudioManagerActivity.this, "音量增加!",
					Toast.LENGTH_SHORT).show();
		}

	}
}
分享到:
评论

相关推荐

    Android程序设计-AudioManager介绍.pptx

    在Android程序设计中,AudioManager是一个至关重要的组件,它负责管理设备的音频输出,包括控制音量、处理音频流和管理音频焦点。本篇将详细阐述AudioManager的主要功能及其使用方法。 首先,AudioManager的实例化...

    AudioManager的setmode使用及其详解

    `AudioManager`是Android系统中的一个关键组件,用于管理和控制设备的音频输出。`setMode`方法是`AudioManager`中的一个重要接口,用于设定当前的音频模式,这直接影响到音频的路由和电话服务层的行为。在不同的音频...

    android-framework-hal

    - **Audio系统架构**:Android音频系统的设计目的是为了提供一套高效且灵活的音频处理框架,支持多种音频格式的播放和录制。它主要包括三个层级:应用程序层、核心库层以及硬件抽象层(HAL)。 - **代码路径**: -...

    如何获取声音管理器: AudioManager

    AudioManager设置声音模式和调整声音大小的方法。 如何获取声音管理器: AudioManager audioManager = (AudioManager) getSystemService(AUDIO_SERVICE); 里面主要的方法: A、设置声音模式 //声音模式 ...

    sinch-android-rtc-3.12.3源码

    `AudioManager`处理音频输入和输出,确保高质量的语音通话体验。 2. **com.sinch.android.rtc.audio**:这部分源码涉及音频处理,包括音频编解码、回声消除、噪声抑制等。例如,`AudioStream`类处理音频流的发送和...

    android安卓切换听筒-外放-蓝牙耳机设备

    这个过程涉及到Android的音频框架,它是一个复杂的系统级服务,负责处理音频输入和输出。本篇文章将深入探讨如何在Android应用中实现听筒、外放和蓝牙耳机之间的音频设备切换。 首先,我们需要理解Android音频框架...

    AudioManager中文翻译

    `AudioManager` 是 Android 操作系统中的一个核心类,用于管理和控制系统的音频输出。通过 `AudioManager`,开发者可以调整音量大小、控制扬声器输出以及处理与音频相关的事件。该类继承自 `java.lang.Object` 并...

    Papae.AudioManager-master.zip

    《Unity3d声音管理插件AudioManager详解》 在Unity3d游戏开发中,音频管理是不可或缺的一部分。它涉及到游戏中的各种声音效果,如角色动作声、环境背景音乐、UI反馈音等。Papae.AudioManager就是一款专为Unity3d...

    android的audio图解

    ### Android Audio架构详解 #### 一、概述 在Android系统中,音频处理是十分关键的部分,它涉及到多媒体应用中的声音播放、录制等多个方面。本文旨在通过解析一份关于Android音频架构的文档来帮助开发者更好地理解...

    Android源码AudioManager和RingerManager分析文档

    在Android源码的基础上分析 音频文件的的扫描,系统铃声的管理以及情景模式的切换

    Android-Prodigal-Android音乐播放器外观像经典的播放设备

    - **多媒体框架**:利用Android的Media Framework API来处理音频播放,包括AudioManager、MediaPlayer等,实现音频的加载、解码和播放。 4. **源代码分析**: 文件名"SpongeBobSun-Prodigal-298d851"可能是项目的...

    Unity-AudioManager:一种在 Unity 中播放和管理多种不同声音的简单、通用的方法

    一种在 Unity 中播放和管理多种不同声音的简单、通用的方法。 只需一行代码即可播放“Resources”文件夹中的声音文件! AudioManager . Main . PlayNewSound ( " GotNewItem " ); 安装 将 AudioManager.cs 和 ...

    Android程序源码--播放器

    4. **Intent**和广播接收器:Android系统通过Intent进行组件间通信。例如,当媒体文件的播放状态改变时,可以通过BroadcastReceiver来监听并做出相应处理,比如在通知栏更新播放状态。 5. **异步加载和线程管理**:...

    Android代码-移动日记本功能包含传统的日记本和音频日记视频日记实现私密日记和普通日记。.zip

    Android提供了KeyStore系统服务,可以生成和管理加密密钥,结合对称加密算法(如AES)来保护敏感数据。 - 另外,应用可能需要请求读写存储权限,以便存取日记文件。 5. **权限管理**: - 在AndroidManifest.xml...

    Android项目实战--手机卫士17--拦截黑名单以及响一声电话的处理

    在本Android项目实战中,我们将深入探讨如何实现手机卫士的核心功能——拦截黑名单及处理响一声电话的问题。手机卫士是一种常见的应用,旨在提供安全防护,帮助用户管理来电和短信,尤其是那些来自未知或不受欢迎...

    android 通讯录+流量控制+声音控制

    - **实时流量统计**:Android提供了ConnectivityManager和NetworkStatsManager服务,可以获取网络流量数据。ConnectivityManager获取网络状态,NetworkStatsManager获取详细的流量统计信息,如应用级别的上传/下载...

    android音乐播放器和视频播放器源码

    - `MediaPlayer`:Android内置的音频播放API,可以处理多种音频格式,如MP3、AAC等。它提供了播放、暂停、停止、快进、倒退等基本操作,并支持流媒体播放。 - `AudioManager`:用于系统音频设置的管理,如音量控制...

    android 播放报警声音

    1. **MediaPlayer**:这是Android提供的一个核心组件,用于播放音频和视频文件。要播放报警声音,首先需要创建`MediaPlayer`对象,然后加载音频资源。资源可以是应用内嵌的raw资源,也可以是从网络或本地文件系统...

    Android--开发--音量seekbar制作.rar

    这里,`android:id`用于标识该SeekBar,`android:layout_width`和`android:layout_height`定义了控件的大小,`android:max`设置SeekBar的最大值。 三、 设置音量值 Android系统提供了AudioManager类来管理音频相关...

    Android App中使用AudioManager类来编写音频播放器

    在Android手机中,我们同样可以通过Android的SDK提供的声音管理接口来管理手机声音模式以及调整声音大小,这就是Android中AudioManager的使用。 AudioManager 类位于 android.Media 包中,该类提供访问控制音量和...

Global site tag (gtag.js) - Google Analytics