我希望这不是通用的,但我正在为 Sony SmartWatch 开发一个应用程序。每当我犯了一个错误,比如允许空指针异常。我无法让我的应用重新启动。就好像它永远处于崩溃状态一样。更糟糕的是,我还停止通过 Logcat 接收与应用程序相关的消息。当我卸载并重新安装应用程序时,它没有在手机上的 SmartWatch 应用程序中列出。就像它不会注册一样。这很难解决,因为此时我没有收到任何日志消息。我唯一能做的就是卸载应用程序。重启我的手机。然后重新安装应用程序。那时它恢复正常,我可以再次开始编写代码。这让我想到了我的问题。有没有更好的方法来重新注册控件?这会发生在最终用户身上吗?如果应用程序崩溃,他们需要卸载,
一些细节(名称已更改以保护无辜者):
我创建了一个广播接收器,并在我的 mainfest 中将其设置为收听这些广播。
<receiver android:name=".MyExtensionReceiver" >
<intent-filter>
<!-- Receiver intents -->
<action android:name="com.sonyericsson.extras.liveware.aef.registration.EXTENSION_REGISTER_REQUEST" />
<action android:name="com.sonyericsson.extras.liveware.aef.registration.ACCESSORY_CONNECTION" />
<!-- Control intents -->
<action android:name="com.sonyericsson.extras.aef.control.START" />
<action android:name="com.sonyericsson.extras.aef.control.STOP" />
<action android:name="com.sonyericsson.extras.aef.control.PAUSE" />
<action android:name="com.sonyericsson.extras.aef.control.RESUME" />
<action android:name="com.sonyericsson.extras.aef.control.ERROR" />
<action android:name="com.sonyericsson.extras.aef.control.TOUCH_EVENT" />
<action android:name="com.sonyericsson.extras.aef.control.SWIPE_EVENT" />
</intent-filter>
MyExtensionReceiver 的代码:
public class MyExtensionReceiver extends BroadcastReceiver {
public MyExtensionReceiver() {
super();
Log.d("mytag", "MyExtensionReceiver Loaded");
Dbg.setLogTag("mytag");
}
@Override
public void onReceive(Context context, Intent intent) {
Log.d("mytag", "onReceive: " + intent.getAction());
intent.setClass(context, MyExtensionReceiver.class);
context.startService(intent);
}
}
即使我的应用程序崩溃了,我仍然应该在调用 onReceive 时收到一条日志消息。就像永远不会发送 EXTENSION_REGISTER_REQUEST 广播一样。我只是一遍又一遍地卸载重新启动和重新安装。最终,SmartConnect 应用程序找到了该应用程序。