我在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");
}
}
我只是想看看它是否工作,但没有显示出来,当我在耳机拔出/插件而运行的应用程序。
编辑:该文件并没有这样说,但有可能是,如果注册在清单这一个都不行? 我能得到它,当我注册的接收器在我的应用程序响应一个(或者你有这样做呢?)
这里有两个网站,可以帮助更多的详细解释一下:
- 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
。
只是补充Greg`s答案,这里是你需要分成两个部分的代码
注册在第一个活动(在这里其所谓的服务MainActivity.java
)。
切换的结果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");
}
}
}
}
您需要启用广播接收器 ,并设置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>