很抱歉问这个。
我有一个Service BroadcastReceiver.onReceive(),它在连接时侦听蓝牙设备,并显示一个对话框,提示用户接受我的应用程序是否应该使用该设备。
问题是,当你连接蓝牙设备时,你通常在设置菜单中,而不是在我的应用程序中。我的服务将看到BluetoothDevice.ACTION_ACL_CONNECTED意图并尝试显示一个自然没有活动窗口的AlertDialog:
02-23 13:22:19.099: E/AndroidRuntime(25884): android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application
02-23 13:22:19.099: E/AndroidRuntime(25884): at android.view.ViewRootImpl.setView(ViewRootImpl.java:563)
02-23 13:22:19.099: E/AndroidRuntime(25884): at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:269)
02-23 13:22:19.099: E/AndroidRuntime(25884): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:69)
02-23 13:22:19.099: E/AndroidRuntime(25884): at android.app.Dialog.show(Dialog.java:281)
02-23 13:22:19.099: E/AndroidRuntime(25884): at android.app.AlertDialog$Builder.show(AlertDialog.java:951)
这里我的onRecevie只是为了它的地狱:(我修剪并编辑它,可能有一个mmissing'}')
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if(action.equals(BluetoothDevice.ACTION_ACL_CONNECTED)) {
final BluetoothDevice btdevice = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
if (btdevice != null) {
serviceHandler.post(new Runnable() {
public void run() {
new AlertDialog.Builder(getApplicationContext())
.setTitle("Bluetooth PAN detected")
.setMessage(
"Do you want to connect to this device?\n" +
"Name: " + btdevice.getName() + "\n" +
"MAC: " + btdevice.getAddress())
.setIcon(android.R.drawable.ic_dialog_alert)
.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
Toast.makeText(getApplicationContext(), e.getMessage(), Toast.LENGTH_LONG).show();
}}
).setNegativeButton("No", null).show();
}
});
}
}
}
任何人都有关于服务如何强制关注活动以便可以绘制对话的建议?或者,Android服务中是否有另一种提示或强制用户输入的方法? (我可以想到为什么需要这样做的十几个原因)
谢谢!
答案 0 :(得分:1)
您只需通过Notification
向用户显示Service
,当用户选择Notification
时,您只需启动您的活动,让用户执行相关任务到BlueTooth
连接。
这是一个很好的实施Notifications
的教程:
http://www.vogella.com/tutorials/AndroidNotifications/article.html
我希望这会有所帮助。
答案 1 :(得分:0)
我认为你应该使用具有适当意图的startActivity来启动你的活动或将它带到前面 - 然后活动会显示消息以响应意图。您可以操作意图上的标志以指定切换到当前活动或为此创建新活动。