从汽车码头删除电话后,应用程序不会从抽屉发射
-
02-10-2019 - |
题
我正在为Android 2.0+设备创建一个替换汽车家庭应用程序。当手机插入汽车码头时,该应用需要启动该应用程序,并在将其从码头上取出时终止。还需要能够从应用程序抽屉启动。
我现在遇到问题,一旦将手机从码头插入并删除,我再也无法从应用程序抽屉中启动该应用程序,因为每次我启动应用程序时,我的广播公司都会出于某种原因选择Dock_event操作。我创建了一个仅注册我的广播员的测试项目,同样的事情也发生了。
这是Broadcastreceiver的代码:
public class CarDockBroadcastReceiver extends BroadcastReceiver {
/**
* @see android.content.BroadcastReceiver#onReceive(Context,Intent)
*/
@Override
public void onReceive(Context context, Intent intent) {
// TODO Put your code here
if(intent.getExtras().containsKey("android.intent.extra.DOCK_STATE")){
int state = intent.getExtras().getInt("android.intent.extra.DOCK_STATE",1);
if(state == 0){
Log.i("Dock", "Removed from dock!");
((Activity)context).finish();
}
}
}
}
我的主要活动如下:
public class MainActivity extends Activity {
/** Called when the activity is first created. */
CarDockBroadcastReceiver receiver;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
IntentFilter filter = new IntentFilter("android.intent.action.DOCK_EVENT");
receiver = new CarDockBroadcastReceiver();
registerReceiver(receiver, filter);
}
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
unregisterReceiver(receiver);
super.onDestroy();
}
}
主要活动具有用于action.main,category.launcher,category.default和category.car_dock的意图过滤器。关于为什么会发生这种情况的任何想法?
解决方案
Intent.ACTION_DOCK_EVENT
是一个粘性的广播。这意味着,当您为其注册接收器时,您将立即获得最后的广播 Intent
对于该动作,然后所有随后的广播直到未注册为止。除了找到一种处理情况之外,您无能为力。
顺便说一句,我建议使用 Intent.ACTION_DOCK_EVENT
而不是 "android.intent.action.DOCK_EVENT"
在你的 IntentFilter
. 。这样,如果出于某种愚蠢的原因,它们会更改实际的字符串,则您的代码无需更改。
不隶属于 StackOverflow