getRingerMode() 在 Android 平板电脑上返回什么?

发布于 2024-11-07 04:49:46 字数 830 浏览 0 评论 0原文

我收到一个错误报告,声音在运行 3.0 的 ASUS Transformer 平板电脑上不起作用。

我没有做任何太奇怪的事情,只是使用 MediaPlayer,它似乎可以在多种手机上使用。但是,我使用 这篇文章禁用声音,如果getRingerMode() 返回 以外的内容RINGER_MODE_NORMAL。这样,如果用户将手机设置为“仅振动”,他们就不会获得令人惊讶的声音输出(因为媒体和铃声使用单独的音量控制)。

在 Android 平板电脑上,如果平板电脑没有电话功能,getRingerMode() 函数是否有可能返回 RINGER_MODE_SILENT

编辑:请注意,在模拟器上,无需更改任何内容,我就会得到 RINGER_MODE_NORMAL。

编辑2:在最后的绝望中,我删除了铃声模式检查并在市场上重新发布。那家伙刚刚确认声音现在可以工作了。看来 getRingerMode() 至少在某些平板电脑上返回除 RINGER_MODE_NORMAL 之外的其他内容。

I've got a bug report that sound doesn't work on an ASUS Transformer tablet running 3.0.

I don't do anything too weird, just use MediaPlayer and it seems to work on a wide range of phones. However, I use the method described in this post to disable sounds if getRingerMode() returns something other than RINGER_MODE_NORMAL. That way if the user has their phone on "vibrate only" they don't get surprising sound output (since media and ringer use separate volume controls).

Is it possible that on an Android tablet the getRingerMode() function returns RINGER_MODE_SILENT if the tablet doesn't have phone capabilities?

EDIT: Just a note that on the emulator without changing anything I get RINGER_MODE_NORMAL.

EDIT 2: In a final act of desperation, I removed the ringer mode check and re-published on the Market. The guy has just confirmed that sounds now work. It seems that getRingerMode() returns something other than RINGER_MODE_NORMAL on some tablets at least.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

往事随风而去 2024-11-14 04:49:46

这是 GingerBread 中的代码。如果 IAudioService 无法返回 getRingerMode();,它将返回 RINGER_MODE_NORMAL

/**
 * Returns the current ringtone mode.
 *
 * @return The current ringtone mode, one of {@link #RINGER_MODE_NORMAL},
 *         {@link #RINGER_MODE_SILENT}, or {@link #RINGER_MODE_VIBRATE}.
 * @see #setRingerMode(int)
 */
public int getRingerMode() {
    IAudioService service = getService();
    try {
        return service.getRingerMode();
    } catch (RemoteException e) {
        Log.e(TAG, "Dead object in getRingerMode", e);
        return RINGER_MODE_NORMAL;
    }
}

http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/2.3_r1/android/media/AudioManager.java/?v=source< /a>

下面一步,

IAudioService#getRingerMode() 抛出 android.os.RemoteException

Honeycomb 中唯一的区别(阅读 chenelog)在音频管理器中是:

添加的字段
int MODE_IN_COMMUNICATION

并且此类中的 3.1 中没有任何内容,因此我假设 Gingerbread 代码仍然有效。

http://developer.android.com/sdk/api_diff/11/changes.html

This is the code from GingerBread. It will return RINGER_MODE_NORMAL if IAudioService can't return getRingerMode();

/**
 * Returns the current ringtone mode.
 *
 * @return The current ringtone mode, one of {@link #RINGER_MODE_NORMAL},
 *         {@link #RINGER_MODE_SILENT}, or {@link #RINGER_MODE_VIBRATE}.
 * @see #setRingerMode(int)
 */
public int getRingerMode() {
    IAudioService service = getService();
    try {
        return service.getRingerMode();
    } catch (RemoteException e) {
        Log.e(TAG, "Dead object in getRingerMode", e);
        return RINGER_MODE_NORMAL;
    }
}

http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/2.3_r1/android/media/AudioManager.java/?v=source

One step below,

IAudioService#getRingerMode() throws android.os.RemoteException

The only difference in Honeycomb (reading the chengelog) in AudioManager is:

Added Fields
int MODE_IN_COMMUNICATION

And nothing in 3.1 in this class, so I assume the Gingerbread code is still valid.

http://developer.android.com/sdk/api_diff/11/changes.html

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文