我试过这些手机: Motorolla后翻1.5,Nexus One 2.1
基本上,我注册了BroadcastReceiver以获得ACTION_HEADSET_PLUG广播,并观看了三个有意提供的附加内容:
下面是API中的描述:
* state - 0 for unplugged, 1 for plugged.
* name - Headset type, human readable string
* microphone - 1 if headset has a microphone, 0 otherwise问题1:当活动开始时(不是预期的),屏幕旋转发生时(没有预期),耳机/耳机插入/断开(预期)时,广播就会出现。
问题2:当耳机/耳机拔出时,后翻电话(1.5)发送空状态+麦克风,“无设备”作为名称,当耳机/耳机插入时,状态+麦克风发送空,“立体声耳机”/“立体声headphones”作为名称。
更新:t-移动G1与1.6的行为相同的后翻手机。
更糟糕的是,当耳机/耳机插入或拔出时,它总是发送空的状态+麦克风,“耳机”作为名称。
问:如何解释API在1.5和2.1版本以及不同的设备、制造商上都被破坏了?
更新:
主要活动的onCreate代码:
// Register receiver
this.registerReceiver(new BroadcastsHandler(), new IntentFilter(Intent.ACTION_HEADSET_PLUG));现在是BroadcastReceiver的代码:
public class BroadcastsHandler extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equalsIgnoreCase(Intent.ACTION_HEADSET_PLUG)) {
String data = intent.getDataString();
Bundle extraData = intent.getExtras();
String st = intent.getStringExtra("state");
String nm = intent.getStringExtra("name");
String mic = intent.getStringExtra("microphone");
String all = String.format("st=%s, nm=%s, mic=%s", st, nm, mic);
AlertDialog.Builder builder = new AlertDialog.Builder(context);
builder.setTitle("Headset broadcast");
builder.setMessage(all);
builder.setPositiveButton("Okey-dokey", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
builder.create().show();
}
}}
发布于 2011-10-18 05:41:54
密码是错的!
"state“和”麦克风“是整数,而不是字符串。因此,代码应该修改如下:
int st = intent.getIntExtra("state" , -1);
String nm = intent.getStringExtra("name");
int mic = intent.getIntExtra("microphone", -1);
String all = "st="+Integer.toString(st)+" nm="+nm+" mic="+Integer.toString(mic);它起作用了!
发布于 2013-09-24 13:21:17
广播在活动启动时出现(未预料到)
它在registerReceiver的文档中:
系统可能广播的意图是“粘性”-这些停留在广播结束后,将发送到任何以后的注册。如果您的IntentFilter与这些粘性意图之一相匹配,此函数将返回该意图,并将其发送给您的接收器,就像它刚刚被广播过一样。
我猜原因是,你的活动有机会得到当前的状态,为这样的“粘性”广播,就在你注册后。
我目前正在开发一个应用程序,它有两个设备需要接收ACTION_HEADSET_PLUG,而且似乎有一些设备不发送这个系统广播(我没有在我的平板电脑上接收它,但是正在我的手机上接收它),所以人们可以得出这样的结论:在注册了这个广播之后,它还没有收到至少一次,那么这个设备就不支持发送它了。我还没有测试这是否也适用于其他系统广播,但我可以想象。
发布于 2010-04-07 19:07:04
傻我,问题有点不同-‘状态’和‘名字’在那里没有‘麦克风’。还有一件事--耳机的状态是0和1,耳机是0和3。超级奇怪..。
https://stackoverflow.com/questions/2524923
复制相似问题