静态广播不工作 ANDROID
Static broadcast not working ANDROID
这是我的接收器文件
package com.example.tony.headsetplug;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;
import android.widget.Toast;
public class MusicIntentReceiver extends BroadcastReceiver {
@Override public void onReceive(Context context, Intent intent) {
Log.i("Tag","got receiver");
}
}
我正在尝试实现用于插入耳机的静态广播,我的清单文件中定义了静态广播。
<?xml version="1.0" encoding="utf-8"?>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<receiver
android:name=".MusicIntentReceiver"
android:enabled="true"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.headset_plug" />
</intent-filter>
</receiver>
<activity
android:name=".MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
它不工作,甚至没有显示收到的广播。
您必须通过代码注册接收器,这是必须的:
计算器。com/questions/6249023/detecting-whether-a-headset-is-plugged-into-an-android-device-or-not
如果您想让您的监听器始终开启,您应该监听系统启动意图并在该监听器中注册。
ACTION_HEADSET_PLUG
的值为"android.intent.action.HEADSET_PLUG"
(注意其中的大写字母)。还要检查 documentation。
p.s.:此外,您必须以编程方式注册接收器(例如检查 this post), 例如:
IntentFilter receiverFilter = new IntentFilter(Intent.ACTION_HEADSET_PLUG);
HeadsetStateReceiver receiver = new HeadsetStateReceiver();
registerReceiver( receiver, receiverFilter );
来自 API 关于 AudioManager.ACTION_HEADSET_PLUG 的官方文档:
Broadcast Action: Wired Headset plugged in or unplugged. You cannot receive this through components declared in manifests, only by explicitly registering for it with Context.registerReceiver().
The intent will have the following extra values:
- state - 0 for unplugged, 1 for plugged.
- name - Headset type, human readable string
- microphone - 1 if headset has a microphone, 0 otherwise
这应该可以解释为什么它在定义为静态时无法正常工作。我认为由于音乐应用程序通常依赖于此广播,因此当用户实际上没有在听音乐或做任何与音频相关的事情时接收这样的广播是没有意义的。
编辑:
如果您想在插入耳机时启动音乐应用程序,但您的 activity 不是 运行,该怎么办?
考虑使用后台服务,它除了注册处理 ACTION_HEADSET_PLUG 的接收器外没有太多作用。为了在设备(重新)启动的情况下启动您的服务,您可以添加一个静态接收器侦听 ACTION_BOOT_COMPLETED,它会启动服务。
顺便说一句:如果您想知道是否可以在安装您的应用程序后立即启动您的服务,那么您不能。至少按照这个post。
希望这对您有所帮助。
这是我的接收器文件
package com.example.tony.headsetplug;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;
import android.widget.Toast;
public class MusicIntentReceiver extends BroadcastReceiver {
@Override public void onReceive(Context context, Intent intent) {
Log.i("Tag","got receiver");
}
}
我正在尝试实现用于插入耳机的静态广播,我的清单文件中定义了静态广播。
<?xml version="1.0" encoding="utf-8"?>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<receiver
android:name=".MusicIntentReceiver"
android:enabled="true"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.headset_plug" />
</intent-filter>
</receiver>
<activity
android:name=".MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
它不工作,甚至没有显示收到的广播。
您必须通过代码注册接收器,这是必须的:
计算器。com/questions/6249023/detecting-whether-a-headset-is-plugged-into-an-android-device-or-not
如果您想让您的监听器始终开启,您应该监听系统启动意图并在该监听器中注册。
ACTION_HEADSET_PLUG
的值为"android.intent.action.HEADSET_PLUG"
(注意其中的大写字母)。还要检查 documentation。
p.s.:此外,您必须以编程方式注册接收器(例如检查 this post), 例如:
IntentFilter receiverFilter = new IntentFilter(Intent.ACTION_HEADSET_PLUG);
HeadsetStateReceiver receiver = new HeadsetStateReceiver();
registerReceiver( receiver, receiverFilter );
来自 API 关于 AudioManager.ACTION_HEADSET_PLUG 的官方文档:
Broadcast Action: Wired Headset plugged in or unplugged. You cannot receive this through components declared in manifests, only by explicitly registering for it with Context.registerReceiver().
The intent will have the following extra values:
- state - 0 for unplugged, 1 for plugged.
- name - Headset type, human readable string
- microphone - 1 if headset has a microphone, 0 otherwise
这应该可以解释为什么它在定义为静态时无法正常工作。我认为由于音乐应用程序通常依赖于此广播,因此当用户实际上没有在听音乐或做任何与音频相关的事情时接收这样的广播是没有意义的。
编辑:
如果您想在插入耳机时启动音乐应用程序,但您的 activity 不是 运行,该怎么办?
考虑使用后台服务,它除了注册处理 ACTION_HEADSET_PLUG 的接收器外没有太多作用。为了在设备(重新)启动的情况下启动您的服务,您可以添加一个静态接收器侦听 ACTION_BOOT_COMPLETED,它会启动服务。
顺便说一句:如果您想知道是否可以在安装您的应用程序后立即启动您的服务,那么您不能。至少按照这个post。
希望这对您有所帮助。