在Android中,你如何注册接收耳机插头广播?(In Android how do you reg

2019-07-03 17:45发布

我在Android 2.1的工作,我希望当耳机插入/取出检测。 我很新到Android。

我认为,它使用的是广播接收器做的方式。 我sublcassed这一点,我也把我的AndroidManifest.xml以下。 但是,你有没有其他somehwere登记接收器一样,在活动? 我知道有很多关于这个主题的,但我真的不明白他们在说什么。 此外,什么是在AndroidManifest.xml与您的活动动态注册登记的区别?

<receiver android:enabled="true" android:name="AudioJackReceiver" >
        <intent-filter>
            <action android:name="android.intent.action.HEADSET_PLUG" >
            </action>
        </intent-filter>
    </receiver>

而这是(加上进口)的类的实现

public class AudioJackReceiver extends BroadcastReceiver {

@Override
public void onReceive(Context context, Intent intent) {
    Log.w("DEBUG", "headset state received");
}

}

我只是想看看它是否工作,但没有显示出来,当我在耳机拔出/插件而运行的应用程序。

编辑:该文件并没有这样说,但有可能是,如果注册在清单这一个都不行? 我能得到它,当我注册的接收器在我的应用程序响应一个(或者你有这样做呢?)

Answer 1:

这里有两个网站,可以帮助更多的详细解释一下:

  • http://www.grokkingandroid.com/android-tutorial-broadcastreceiver/
  • http://www.vogella.com/articles/AndroidBroadcastReceiver/article.html

你必须确定你的意图; 否则将无法访问系统功能。 广播接收器; 会提醒你的,你想听更改的应用。

每一个接收器需要被继承; 它必须包括onReceive() 要实现onReceive()您需要创建一个方法,其中将包括两个项目: 上下文意图

更多的则可能是一个服务将是理想的; 但你会创建服务,并通过它定义你的背景。 在上下文中; 您将定义你的意图。

一个例子:

context.startService
      (new Intent(context, YourService.class));

非常简单的例子。 然而; 您的特定目标是利用全系统广播。 您希望您的应用程序被通知的Intent.ACTION_HEADSET_PLUG

如何通过清单订阅:

<receiver
    android:name="AudioJackReceiver"
    android:enabled="true"
    android:exported="true" >
    <intent-filter>
        <action android:name="android.intent.action.HEADSET_PLUG" />
    </intent-filter>
</receiver>

或者,你可以通过你的应用程序简单地定义; 但。 您的特殊要求; 需要的用户权限,如果你打算探测蓝牙MODIFY_AUDIO_SETTINGS



Answer 2:

只是补充Greg`s答案,这里是你需要分成两个部分的代码

  1. 注册在第一个活动(在这里其所谓的服务MainActivity.java )。

  2. 切换的结果ACTION_HEADSET_PLUG在行动BroadCastReceiver

这里有云:

public class MainActivity extends Activity  {
private static final String TAG = "MainActivity";
private MusicIntentReceiver myReceiver;

@Override protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    myReceiver = new MusicIntentReceiver();
}

@Override public void onResume() {
    IntentFilter filter = new IntentFilter(Intent.ACTION_HEADSET_PLUG);
    registerReceiver(myReceiver, filter);
    super.onResume();
}

private class MusicIntentReceiver extends BroadcastReceiver {
    @Override public void onReceive(Context context, Intent intent) {
        if (intent.getAction().equals(Intent.ACTION_HEADSET_PLUG)) {
            int state = intent.getIntExtra("state", -1);
            switch (state) {
            case 0:
                Log.d(TAG, "Headset is unplugged");
                break;
            case 1:
                Log.d(TAG, "Headset is plugged");
                break;
            default:
                Log.d(TAG, "I have no idea what the headset state is");
            }
        }
    }
}


Answer 3:

您需要启用广播接收器 ,并设置exported属性为true

<receiver
    android:name="AudioJackReceiver"
    android:enabled="true"
    android:exported="true" >
    <intent-filter>
        <action android:name="android.intent.action.HEADSET_PLUG" />
    </intent-filter>
</receiver>


文章来源: In Android how do you register to receive headset plug broadcasts?