如何调整Android手机的开机音量大小

公司最近让我调整项目(一款android智能机)的开机音量,研究了半天,总结一下方法:

开机音量是一个service播出的。这个service 应该在一个init.rc中:service playsound /system/bin/mplayer ...

于是想到音量的控制可能在这个bin文件中。于是找到bin文件的源码如下mplayer.c:


using namespace android;

#define DEFAULT_PATH_SOUND "/system/media/bootsound.mp3"

#define CTL_USE_FILE_EX_NAME (1 << 0)

static int binder_ipc(void *cookie)
{
ProcessState::self()->startThreadPool();
IPCThreadState::self()->joinThreadPool();
return 0;
}

static void usage(void)
{

int main(int argc, char *argv[])
{
int arg;
time_t stime;
int ctl = 0;
int seconds_max = 0;
int msecond = 0;
float volume = 100.0f;
int fd = 0;
// static struct timeval tmv;/* = {.tv_sec = 0, .tv_usec = 500*1000}; [luther.gliethttp] */
static char path[512];

while ((arg = getopt(argc, argv, "l:s:v:e")) != EOF) {
switch (arg) {
case 'l': seconds_max = strtol(optarg, NULL, 0); break;
case 's': msecond = strtol(optarg, NULL, 0); break;
case 'v': volume = strtol(optarg, NULL, 0); break;
case 'e': ctl |= CTL_USE_FILE_EX_NAME; break;
default: usage(); return -1; break;
}
}

property_get("sys.mplayer.seconds", path, "0");
arg = strtol(path, NULL, 0);
if (arg != 0 && seconds_max == 0) seconds_max = arg;

property_get("sys.mplayer.volume", path, "100");                //这里是获得系统属性中音量的值,如果没有得到,取默认值100
arg = strtol(path, NULL, 0);
if (arg != 100 && volume == 100) volume = arg;

property_get("sys.mplayer.msecond", path, "0");
arg = strtol(path, NULL, 0);
if (arg != 0 && msecond == 0) msecond = arg;

if (argv[optind] != NULL)
strncpy(path, argv[optind], sizeof path);
else property_get("sys.mplayer.path", path, DEFAULT_PATH_SOUND);

if (seconds_max == 0)
seconds_max = INT_MAX - 50;
if (volume > 100) volume = 100;
volume /= 100.0f;                                                                 //设置音量的百分比

if ((ctl & CTL_USE_FILE_EX_NAME) == 0) {
fd = open(path, O_RDONLY);
if (fd < 0) {
LOGE("File <%s> is not found.\n", path);
return -1;
}
}

sp<MediaPlayer> mp = new MediaPlayer();
createThreadEtc(binder_ipc, &mp, "mplayer binder ipc");
mp->reset();
if (ctl & CTL_USE_FILE_EX_NAME) {
mp->setDataSource(path, NULL);
} else {
mp->setDataSource(fd, 0, INT_MAX);
close(fd);
}

mp->prepare();
if (msecond) mp->seekTo(msecond);
mp->setVolume(volume, volume);                //设置左右声道的音量大小
mp->start();
stime = time(NULL); 
// tmv.tv_sec = 0; tmv.tv_usec = 500*1000;
while (mp->isPlaying()) {
sleep(1); // select(0, 0, 0, 0, &tmv);
if (difftime(time(NULL), stime) > seconds_max)
break;
}
mp->stop();
mp->disconnect();

return 0;
}

由于项目中sys.mplayer.volume没有设置,所以在get的时候得到默认值100,造成音量很大。于是在system.prop中添加:

sys.mplayer.volume=50

音量大小变成原来的一半。

这里提供两个方法,动态设置属性大小,方便大家调试用:

在adb shell中

获得属性: getprop sys.mplayer.volume

设置属性:setprop sys.mplayer.volume 50

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值