【问题标题】:Xiaomi does not receive notification when application is not running应用程序未运行时小米没有收到通知
【发布时间】:2015-08-25 05:15:54
【问题描述】:

我正在开发一个使用 Google 推送通知的应用程序。应用程序在小米手机中运行时会收到通知,否则当它被杀死时它不会收到通知。

如果我们想在应用程序被终止时收到通知,那么我们需要允许从小米的安全应用程序中手动自动重启应用程序。我想要任何技巧以编程方式执行此操作而无需询问用户。有没有办法做到这一点?

http://en.miui.com/thread-33826-1-1.html

【问题讨论】:

  • 它在其他供应商设备中正常工作。 “你还试过什么?” - 我只查看了 stackoverflow 和附加链接,但没有找到任何解决方案。如果您有解决方案,请分享,否则写这样的评论没有意义。我不认为这是 dup 问题
  • 你的手机上有谷歌框架吗?
  • @Williams 我认为你的问题是这样的:“我想要任何技巧以编程方式执行此操作而无需询问用户。有没有办法做到这一点?”我的声明对此有效。
  • @Mine 这是小米手机..
  • 问题是,我仍然收到来自 Facebook 和 Whatsapp 的通知。他们做了什么不同的事情?

标签: android push-notification google-cloud-messaging


【解决方案1】:

有五项设置需要手动完成,以防小米正确运行任何应用程序。我对此进行了大量研究,但无法以编程方式修复这些设置。这些是设置:

  1. 自动启动 -> 开启(切换并重新启动您的应用)
  2. 开发者选项下的MIUI优化->关闭
  3. 开发者选项下的内存优化 -> LOW/OFF
  4. 电池和性能设置下对后台活动没有限制
  5. 省电模式 -> 关闭

还有许多其他设备需要手动设置才能使应用按预期工作,例如联想,一些 Micromax 设备。公司对后台活动施加此类限制,以提高整体电池寿命。 facebook 和 whatsapp 等一些应用程序可以正常工作,因为这些应用程序可能已包含在系统应用程序中。

【讨论】:

  • 谢谢,我刚刚用 MIUI global 9.1 在我的小米上进行了测试,现在我的 Intent Services 可以工作了!
【解决方案2】:

MIUI 6 & 7 之后:

MIUI省电模式默认设置为“标准”(后台访问定位服务和网络将被限制)

在哪里设置:

设置 -> 其他设置 -> 电池和性能 -> 管理应用的电池使用情况 -> 省电模式 -> 设置为关闭(MIUI 不会限制后台活动)

【讨论】:

    【解决方案3】:

    据我了解,一旦您在最近的应用程序菜单中清除应用程序或清除内存,小米(或 MIUI rom)将强制关闭与该应用程序相关的所有服务和内存,类似于用户进入设置并强制停止应用,

    This Link 谈到了同样的问题,因此除非用户再次启动,否则所有广播接收器和服务都将结束,因此不会收到通知,

    但是,您可以尝试在设置中为您的应用权限启用自动启动,如果仍然无法正常工作,请尝试创建自行重启的服务并启用自动启动强>在设置中, 自动启动在 MIUI 中非常重要,在它启用之前,所有通知或应用程序活动将被强制关闭并且永远不会启动

    【讨论】:

    • 如何创建一个自己重启的服务?
    • 你可以通过多种方式做到这一点,首先尝试START_STICKY,如果它被系统结束,它会尝试重新创建服务,或者只是听服务的onDestroy并尝试重新开始
    • 其他应用,如 Facebook、whatsapp 等,即使我的应用不在 ROM 中,它们也会发送通知,所以请告诉我这些应用如何解决 MI 手机中的这个问题。
    • @SudhanshuGaur 不,如果未在“自动启动”中启用它,它将不会运行任何后台服务,默认情况下,所有新安装的应用程序都处于禁用模式,但是很少有像 FB 和 WhatsApp 这样的流行应用程序被启用安装时默认,但您仍然可以手动禁用它们并自行测试,它们不会再收到任何消息
    • 是的,我已经知道了,我想问一下 FB 或 Whatsapp 写了什么代码,以便他们的应用程序默认安装时带有“自动启动”选项。
    【解决方案4】:

    我遇到了类似的问题,并通过向我的应用添加 BOOT_COMPLETED 接收器来解决它。

    在清单中添加以下内容:

    <receiver
        android:name=".receivers.BootReceiver"
        android:enabled="true">
        <intent-filter>
           <action android:name="android.intent.action.BOOT_COMPLETED" />
        </intent-filter>
    </receiver>
    

    然后创建你的 BootReceiver 类

    public class BootReceiver extends BroadcastReceiver {
    
        @Override
        public void onReceive(Context context, Intent intent) {
            if (intent.getAction().equals("android.intent.action.BOOT_COMPLETED")) {
    
                Intent startServiceIntent = new Intent(context, FBTokenService.class);
                context.startService(startServiceIntent);
    
                Intent notificationServiceIntent = new Intent(context, FBNotificationService.class);
                context.startService(notificationServiceIntent);
            }
        }
    }
    

    它应该适用于此。

    【讨论】:

    • 这在混合应用程序上如何工作 - 例如与科尔多瓦?\
    • @Rodney 你可以试着写一个原生的cordova插件吗?只是一个想法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-27
    相关资源
    最近更新 更多