我正在为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. 。这样,如果出于某种愚蠢的原因,它们会更改实际的字符串,则您的代码无需更改。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top