我希望这不是通用的,但我正在开发一款适用于Sony SmartWatch的应用程序。什么时候我犯了一个错误,比如允许空指针异常。我无法让我的应用重启。就像它永远处于坠毁状态一样。为了使问题更严重,我也停止通过与该应用程序相关的Logcat接收消息。当我卸载并重新安装应用程序时,它未在手机上的SmartWatch应用程序中列出。喜欢它不会注册。由于此时我没有收到任何日志消息,因此很难解决问题。我唯一能做的就是卸载应用程序。重启我的手机。然后重新安装该应用程序。那时它恢复正常,我可以再次开始编写代码。这让我想到了我的问题。 有没有更好的方法来重新注册控件? 这会发生在最终用户身上吗?如果应用程序崩溃,他们需要卸载,重新启动并安装才能恢复吗?
一些细节(名称已被更改以保护无辜者):
我创建了一个广播接收器,并在我的主要节目中设置它来收听这些广播。
<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应用程序会找到该应用程序。
答案 0 :(得分:0)
它似乎与BroadcastReceiver没有任何关系。没有使用一个,我有同样恼人的问题。我需要重新启动手机以便再次正常运行,因为禁用/启用应用程序都没有帮助,也没有杀死SmartWatch手机应用程序(因为我看不到其他方式重新启动它)。
我也很感谢索尼在这件事上的一些帮助。
答案 1 :(得分:0)
刚刚遇到这个问题,给了一些灰色!!要解决此问题,只需使用字符串创建一个新意图并使用上下文启动它。
Intent intent = new Intent("MY.PACKAGE.NAME.MyExtensionReceiver");
context.startService(intent);