重新启动后尝试在android中重新安排以前的警报通知的代码?并登录我的手机?

Dea*_*ler 5 android android-studio

我正在尝试遵循这个答案但是,它在模拟器和我的手机上都不起作用,所以我对模拟器日志和电话有疑问并重新启动以模拟和调试

我在底部有非常有趣的笔记,让我感到非常困惑

我正在使用 API 24 和像素 3 模拟器和真正的三星 8 手机

我做了典型的添加到清单

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
Run Code Online (Sandbox Code Playgroud)

    <receiver android:name=".biz.alarm.BootupReceiver" >
        <intent-filter>
            <action android:name="android.intent.action.BOOT_COMPLETED" />
        </intent-filter>
    </receiver>
Run Code Online (Sandbox Code Playgroud)

但是我从来没有看到这个日志语句......

public class BootupReceiver extends BroadcastReceiver {
  private final static String TAG = "BootupReceiver";

  @Override
  public void onReceive(Context context, Intent intent) {
    String action = intent.getAction();
    Log.d(TAG, "booted. action="+action);

  }
}
Run Code Online (Sandbox Code Playgroud)

对于模拟,我单击播放按钮并观看我的应用程序出现。然后我按住电源按钮,当我真的只想重新启动时,它只给我一个“关机”选项......奇怪,所以我关机了。这似乎完全退出了模拟,这样当我在 Android Studio 的模拟器上再次点击播放时,它就会记录

08/06 19:17:40: Launching 'app' on Pixel 3 API 24.
$ adb shell am start -n "app.mykeepintouch.kit/app.mykeepintouch.kit.MainActivity" -a android.intent.action.MAIN -c android.intent.category.LAUNCHER
...
D/MainActivity: onCreate: starting
Run Code Online (Sandbox Code Playgroud)

没有启动日志供我重新注册通知。 问题1:模拟器不能正确模拟吗?

接下来,我的真实手机——嗯,我猜也是一样的,但也许我至少可以在手机上查看一些日志?我遇到的帖子谈到转储到 sd 卡,但我已插入 android studio,所以我认为我可以以某种方式将日志转储到 android studio?

编辑:我也在使用该帖子中的示例链接。我做了一个 git clone 导入了项目,选择了 API 24 并在 PollReceiver 中添加了一个日志。它在我上床睡觉时起作用,而在我今天早上跑步时第二次跑步时不起作用。我会在调试我想到的随机场景时添加更多信息。

奇怪的场景 1:如果我打开了两个 android studio 项目并打开我的个人应用程序,然后在我的项目之后打开示例链接应用程序,我会看到一个 Toast“已安排警报”。但是,在 5 秒后警报响起之前,我无法在 PollReceiver 上找到任何日志。我期待在开始时看到 PollReceiver 的日志,但直到 5 秒才看到。此后的另一次运行没有产生任何日志(除了弹出的吐司消息,所以我知道它运行了该代码......非常奇怪)。然后我向 ScheduledServiceDemoActivity 添加了一条日志消息,现在我一次无法重现 0 个日志。

奇怪的场景2:我重新启动手机(或者它不断启动我的应用程序并且场景 1 继续工作)。然后我只启动示例链接应用程序,没有任何反应。我等了 90 秒,什么也没有。

这可能就是为什么它在昨晚我睡觉前像在场景 1 中那样起作用的原因。

最后的猜测:我永远无法在启动时启动 PollReceiver。ScheduledServiceDemoActivity 似乎是真正的切入点,我从来没有在上面的代码中添加过服务,因为我不想要一个......只是想收到被启动重新安排警报的通知。 这让我得出一个可能的结论,ScheduledServiceDemoActivity 是否在启动时在某些设备上触发,而 PollReceiver 在启动时用于其他设备?如果是这样,哪些模拟器可以模拟其他启动场景?

编辑(我有另一个想法)在我的三星手机上,我检查了权限,即使我在清单中添加了这 4 行,也只有三行

<!-- So we can make a phone call out -->
<uses-permission android:name="android.permission.CALL_PHONE" />
<!-- so we can send a text -->
<uses-permission android:name="android.permission.SEND_SMS" />
<!-- So we can reschedule alarms that went off while powered off -->
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<!-- read contacts so they can easily choose their friends -->
<uses-permission android:name="android.permission.READ_CONTACTS" />
Run Code Online (Sandbox Code Playgroud)

接收引导不在那里。这是问题吗?或者手机不会向用户列出已完成的接收启动,因为这可能会造成混淆?

谢谢,院长

Ale*_*mcf 0

尝试将其添加到清单中的意图过滤器中:

<receiver android:name=".biz.alarm.BootupReceiver" >
        <intent-filter>
            <action android:name="android.intent.action.BOOT_COMPLETED" />
            <action android:name="android.intent.action.QUICKBOOT_POWERON"/>
        </intent-filter>
    </receiver> 
Run Code Online (Sandbox Code Playgroud)

当我在某些设备上遇到类似问题时,它对我很有帮助。