GCMIntentService 的 onRegistered() 从未调用过

2024-01-12

我正在尝试在 GCM 上注册我的应用程序,但我不知道为什么我的应用程序从未注册。GCMRegistrar.register(this, SENDER_ID);被调用,但我的 GCMIntentService 中的 onRegistered() 从未被调用。我不知道WHY.

这是我的 Logcat

01-17 11:03:00.015: D/GCMRegistrar(3509): resetting backoff for com.abc.xyz.ui.activity
01-17 11:03:03.210: V/GCMRegistrar(3509): Registering app com.abc.xyz.ui.activity of senders 964256581311
01-17 11:03:06.070: V/GCMBroadcastReceiver(3509): onReceive: com.google.android.c2dm.intent.REGISTRATION
01-17 11:03:06.070: V/GCMBroadcastReceiver(3509): GCM IntentService class: com.abc.xyz.ui.activity.GCMIntentService
01-17 11:03:06.070: V/GCMBaseIntentService(3509): Acquiring wakelock

这是我的完整清单

    <?xml version="1.0" encoding="utf-8"?>
<manifest package="com.abc.xyz.ui.activity"
    android:versionCode="1"
    android:versionName="1.5.6" xmlns:android="http://schemas.android.com/apk/res/android">

    <uses-sdk 
        android:minSdkVersion="11" android:targetSdkVersion="16"/>
    <uses-feature 
        android:name="android.hardware.usb.host"/>

    <!-- This app has permission to register and receive data message. -->
    <uses-permission
        android:name="com.google.android.c2dm.permission.RECEIVE" />

    <uses-permission 
        android:name="android.permission.INTERNET" />
    <uses-permission 
        android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission 
        android:name="android.permission.GET_TASKS" />
    <uses-permission 
        android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission
        android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission 
        android:name="android.permission.ACCESS_WIFI_STATE"/>
    <uses-permission 
        android:name="android.permission.CALL_PHONE" /> 
    <uses-permission 
        android:name="android.permission.BLUETOOTH" />

    <!-- GCM requires a Google account. -->
    <uses-permission android:name="android.permission.GET_ACCOUNTS" />

    <!-- Keeps the processor from sleeping when a message is received. -->
    <uses-permission android:name="android.permission.WAKE_LOCK" /> 

    <!--
     Creates a custom permission so only this app can receive its messages.

     NOTE: the permission *must* be called PACKAGE.permission.C2D_MESSAGE,
           where PACKAGE is the application's package name.
    -->
    <uses-permission
        android:name="com.abc.xyz.ui.activity.permission.C2D_MESSAGE" />   
    <permission
        android:name="com.abc.xyz.ui.activity.permission.C2D_MESSAGE"
        android:protectionLevel="signature" />    
    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name" 
        android:theme="@android:style/Theme.Holo.Light" 
        android:name="com.abc.xyz.MyApplication" 
        android:allowBackup="false">
        <activity
            android:name=".StartupActivity"
            android:noHistory="true"
            android:label="@string/title_startup_screen" 
            android:configChanges="orientation">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            android:name=".LoginActivity"
            android:windowSoftInputMode="stateAlwaysVisible|adjustResize"
            android:label="@string/title_login_screen"
            android:configChanges="orientation">
        </activity>
        //my other activity defination

        <!--
          BroadcastReceiver that will receive intents from GCM
          services and handle them to the custom IntentService.

          The com.google.android.c2dm.permission.SEND permission is necessary
          so only GCM services can send data messages for the app.
        -->
        <receiver
            android:name="com.google.android.gcm.GCMBroadcastReceiver"
            android:permission="com.google.android.c2dm.permission.SEND" >
            <intent-filter>
                <!-- Receives the actual messages. -->
                <action android:name="com.google.android.c2dm.intent.RECEIVE" />
                <!-- Receives the registration id. -->
                <action android:name="com.google.android.c2dm.intent.REGISTRATION" />
                <category android:name="com.abc.xyz.ui.activity" />
            </intent-filter>
        </receiver>

        <!--
          Application-specific subclass of GCMBaseIntentService that will
          handle received messages.

          By default, it must be named .GCMIntentService, unless the
          application uses a custom BroadcastReceiver that redefines its name.
        -->
        <service android:name="com.abc.xyz.ui.activity.GCMIntentService" />

    </application>
</manifest>

我不知道出了什么问题以及为什么 onRegistered() 从未被调用。任何帮助将不胜感激。


我在另一篇文章中弄清楚了问题所在。我的 GCMIntentService 类在我的清单中定义为

<service android:name="MY_PACKAGE.gcm.GCMIntentService" />

因为我不想将此类放在根包中,而是放在 MY_PACKAGE.gcm" 中。这似乎会导致问题,正如文档所述,

添加以下意向服务

<service android:name=".GCMIntentService" />

所以当我移动到根包时它就起作用了!还有另一种方法可以将 GCMIntentServiceSubclass 放在您想要的任何位置并以不同的方式命名。您应该子类化 GCMBroadcastReceiver 并在清单和子类中进行更改,如另一个所示post https://stackoverflow.com/questions/11332034/google-gcmintentservice-instantiate.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

GCMIntentService 的 onRegistered() 从未调用过 的相关文章

随机推荐

  • 计算函数的反函数--库[关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 是否有任何库可用于函数的反函数 更具体地说 给定一个函数y f x 和域 是否有任何库可以输出x f y
  • ORM 排序与模型“元”排序 - Django 1.11

    小问题 订购商品的更好方式是什么 1 class Table models Model class Meta ordering user 2 Table objects all order by user 我认为第二个更好 因为第一个总是会
  • iOS - AudioOutputUnitStop 导致应用程序冻结并发出警告

    有时执行 AudioOutputUnitStop inputUnit 导致应用程序冻结约 10 15 秒并显示以下控制台消息 WARNING 0x3b58918c AURemoteIO cpp 1225 Stop AURemoteIO St
  • 如何使用nodeJS连接到隐式FTPS服务器?

    对于一个项目 我必须通过隐式连接连接到 FTPS 服务器 我尝试使用node ftp 因为这似乎是唯一支持隐式连接的库 我使用以下代码进行连接 var ftpC new FTPClient ftpC on ready function co
  • angular2 组件中的多个动画触发器

    我想在一个组件中定义多个动画触发器 这可能吗 例如 一种用于进入场景 另一种用于悬停 或者我是否需要为这种情况定义两个组件 父子组件 项目组件 ts removed the import and class part for better
  • Javascript / REGEX:删除字符串中以特定字母开头的特定文本(单词),单词之间以空格分隔

    我知道这可以通过正则表达式快速完成 我得到的字符串如下 Alpha OmegaS Sheol Gehena GSSaga Serekali 我想删除以 s 开头的单词 所以我应该 Alpha OmegaS Gehena GSSaga 我尝试
  • ThreadStateException:尝试加入线程时线程尚未启动

    就在最近我面试的时候遇到了这样一个问题 methid 计算 执行的输出是什么 public void Calculate var threads Enumerable Range 0 50 Select x gt var thread ne
  • DataGridView 鼠标滚轮滚动停止工作

    我的应用程序中有一个 DataGridView 但无法使用鼠标滚轮滚动它 以前运行得很好 我不确定我做了什么导致了这个问题 因为我最近对代码进行了多次更改后才注意到它 我没有发布任何代码 因为有超过 2k 行 而且我不确定错误可能出在哪里
  • 如何阻止网站注册表中的一次性电子邮件地址? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我想知道可能的阻止方法一次性电子邮件地址 http en wikipedia org wiki Dis
  • 是否可以对包含 url 编码的 url 进行 urlencode?

    我有一个网站 使用 Facebook Twitter 美味分享链接 它们包含您希望共享的网站的 url 编码 url 问题是我想通过 php 重定向页面发送 facebook twitter delicious url 在编码的 url 中
  • 在 VBA 中导入 UTF-8 文件

    我想在表中导入一个管道分隔文件 但该文件采用 UTF 8 格式 具有动态结构 我曾尝试使用 TransfertText 和 FSO 但只有 ADODB Stream 似乎可以很好地处理这种编码 但它只读取全文 如何每行读取这样的文件行以在现
  • 具有抽象方法的接口

    我遇到了一些由同事编写的 PHP 代码 它没有用于任何用途 基本上它是一个包含抽象方法的接口 然后我说这很愚蠢 并展示了坐在我旁边的另一位同事 我们笑了 但随后开始互相询问这是否可能 如果可能的话是否真的有用 显然这是不可能的 参见下面的示
  • module-info.java 不适用于 Java 9 中的 lombok

    我在将项目迁移到Java 9 更新 Java 9 后 我尝试运行项目 但遇到编译器错误 Error 6 1 java package javax annotation is not visible package javax annotat
  • 在 Windows 8 上安装 Docker 卷不起作用

    Context 我想在 Windows 8 上运行 Docker Compose 应用程序 我在 Ubuntu 16 04 下制作了它 它运行得很好 此 Docker Compose 运行 nginx php fpm 这两个容器使用卷 Fi
  • Git 预提交钩子配置

    我正在关注办公室指导 https pre commit com创建钩子并将其添加到预提交检查过程 我需要创建 3 个文件 pre commit config yaml pre commit hooks yaml theCheckFile s
  • ioexception:在java中写入文件时客户端不拥有所需的权限

    我搜索了很多类似的问题 但无法解决我的问题 我试图在文件中写入一些内容 这给了我错误 My code try File f new File file name f createNewFile System out println Hell
  • 无法使用 Sigma.js 显示任何图表

    我想在网络界面上可视化大型网络图 经过几天的搜索 我决定使用 Sigma js 因为它看起来很简单并且兼容 HTML5 问题是我无法显示 Sigma js 网页上的任何图形示例 即使我使用作者在 Sigma js 主页上拥有的最少代码也是如
  • write 和 printf 哪个更快?

    进行以下测试后 for i 0 i lt 3000000 i printf Test string n for i 0 i lt 3000000 i write STDOUT FILENO Test string n strlen Test
  • 如何创建带空格的列名?

    谁能告诉我如何创建带有 全名 这样的空格的列 我已经尝试过类似以下的操作 但它不起作用 CREATE TABLE info Full Names varchar 20 Physical Address varchar 20 Moviesre
  • GCMIntentService 的 onRegistered() 从未调用过

    我正在尝试在 GCM 上注册我的应用程序 但我不知道为什么我的应用程序从未注册 GCMRegistrar register this SENDER ID 被调用 但我的 GCMIntentService 中的 onRegistered 从未