2017-06-18 135 views
0

我在我的android移动应用程序中集成了FCM(Firebase云消息传递)。当通过FCM接收到设备通知时,我想重新启动android设备(已生根)。但是,当我使用以下代码重新启动设备时,设备将重新启动并再次自动重新启动(尽管我没有发送通知)。为什么会发生?我该如何解决这个问题?重新启动Android设备,在FCM通知接收上重新启动两次

Runtime.getRuntime().exec(new String[]{"su", "-c", "reboot now"}); 

我发送POST请求https://fcm.googleapis.com/fcm/send网址为正确答案的this问题mentioed。

我的代码如下

public class MyFirebaseMessagingService extends FirebaseMessagingService { 
      String restart = "restart"; 
      String take_screenshot = "take_Screenshot"; 

      @Override 
      public void onMessageReceived(RemoteMessage remoteMessage) { 
       Map<String, String> data = remoteMessage.getData(); 
       final String myCustomKey = data.get("my_custom_key"); 
       reboot(); 
      } 
      private void reboot() { 
       try { 
        Runtime.getRuntime().exec(new String[]{"su", "-c", "reboot now"}); 
       } catch (IOException e) { 
       } 
      } 
} 
+0

请发布您的堆栈跟踪以更好地调试此问题。 –

+0

恕我直言,这是***用户体验不佳,用触发通知触发设备重启。 –

回答

0

我怀疑太快重启设备不允许FCM来存储它收到的消息中的信息。

因此,当设备重新启动消息被下载(并再次传递到应用程序)。

我建议在重新启动前添加几秒钟的延迟。

+0

我试过了。这没有用。这只发生在某些设备(KitKat)中。它在Lolipop设备中工作正常。 –

+0

你能否检查你有最新版本的Google Play服务apk? –

+0

也是,是在控制台中可用的linux命令“sync”吗?如果是在调用重启之前尝试调用它,则可能有助于将数据写入文件系统。 –