目标是拦截来自耳机的广播以及最终的蓝牙,以响应来自耳机的不同类型的点击以改变媒体播放器.此解决方案适用于ICS之前的所有版本.这是我尝试过的一些代码和事情:
....
private BroadcastReceiver mediaButtonReceiver = new MediaButtonIntentReceiver();
....
public void onCreate() {
...
IntentFilter mediaFilter = new IntentFilter(Intent.ACTION_MEDIA_BUTTON);
mediaFilter.setPriority(2147483647); // this is bad...I know
this.registerReceiver(mediaButtonReceiver, mediaFilter);
...
}
public class MediaButtonIntentReceiver extends BroadcastReceiver {
private KeyEvent event;
public MediaButtonIntentReceiver() {
super();
}
@Override
public void onReceive(Context context, Intent intent) {
String intentAction = intent.getAction();
if (!Intent.ACTION_MEDIA_BUTTON.equals(intentAction)) {
return;
}
event = (KeyEvent)intent.getParcelableExtra(Intent.EXTRA_KEY_EVENT);
if (event == null) {
return;
}
try {
int action = event.getAction();
switch(action) {
case KeyEvent.ACTION_UP …Run Code Online (Sandbox Code Playgroud) android media-player android-intent android-4.0-ice-cream-sandwich
我有一个活动与R.id.eventDistance和R.id.eventTime显示基于当前位置的距离和旅行时间.我使用我的位置服务类每30秒计算一次这些值.
我的问题是:如何在Activity中更新TextView?我已经尝试查找问题并找到了一些可能的解决方案,例如使用BroadcastReceiver并在onReceive()方法中调用TextView.setText().我不确定这是怎么做的.我应该像这样传入Activity类:
public class MyReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Intent i = new Intent(context, HomeActivity.class);
}
}
Run Code Online (Sandbox Code Playgroud)
我不知道在那之后该怎么做.任何帮助表示赞赏.
我正在尝试将一个int值从我的Service传递给CallReceiver类,不幸的是CallReceiver.value总是等于0,即使在设置了另一个值之后也是如此.当我试图将它作为参数传递给构造函数时,情况完全相同,因此使用从service调用的setter方法.真的没有办法传递任何数据吗?
服务:
SharedPreferences settings = getSharedPreferences("SETTINGS", 0);
int value = settings.getInt("value1", 0); // here the correct value is present, not 0.
CallReceiver mCallReceiver = new CallReceiver();
CallReceiver.value = value;
Run Code Online (Sandbox Code Playgroud)
接收器:
public class CallReceiver extends BroadcastReceiver {
public int value;
public CallReceiver(int value) {
this.value = value;
}
public CallReceiver() {
}
@Override
public void onReceive(Context context, Intent intent) {
Log.v("value", String.valueOf(value)); // here "value" = 0.
}
}
Run Code Online (Sandbox Code Playgroud) 我设法让我的耳机按钮在按下时被我的应用程序识别,但其中一个按钮需要调用 MyCustomActivity 中的方法。问题是 onReceive 的第一个参数是一个无法转换为 Activity 的上下文,因此我被迫将 BroadcastReceiver 实现为 MyCustomActivity 中的内部类。
到目前为止一切顺利,但如何在清单中注册这个内部 MediaButtonEventReceiver?
对于独立类,这很简单:
<receiver android:name=".RemoteControlReceiver">
<intent-filter>
<action android:name="android.intent.action.MEDIA_BUTTON" />
</intent-filter>
</receiver>
Run Code Online (Sandbox Code Playgroud)
对 MyCustomActivity 的 mReceiver 执行相同操作的技巧/语法是什么?
private BroadcastReceiver mReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context ctx, Intent intent) {
// ...
}
}
Run Code Online (Sandbox Code Playgroud) android ×4
android-4.0-ice-cream-sandwich ×1
media-player ×1
service ×1
textview ×1
variables ×1