【问题标题】:Android device not showing alert in response to remote push notification when the app is not running当应用程序未运行时,Android 设备未显示警报以响应远程推送通知
【发布时间】:2015-09-15 05:15:55
【问题描述】:

我在这里看到了许多其他问题,说如果应用被强制停止,它将不会收到通知。

但是,我不会强制停止此应用程序。我只是按下后退按钮。我也尝试过点击主页按钮。在这两种情况下都没有警报。

但是,如果应用程序在前台运行,则会触发 PushReceived 事件并且 AData.Message 会显示正确的文本。因此,似乎远程通知正在发送到设备,只是应用程序从未被唤醒来处理它们。

该应用是用 Delphi XE8 编写的,我在 KitKat 和 JellyBean 上进行了测试,结果相同。

我怀疑问题出在 Android Manifest 文件中。副本如下。除此之外,我不知道该去哪里。据我了解,当收到推送时,它应该在 Firemonkey 框架中运行一小段代码,在不启动完整应用程序的情况下显示推送消息。

我正在使用本教程中描述的应用程序来尝试找出它为什么不能在我的实时应用程序中运行。这在 XE7 中可以正常工作。

http://docwiki.embarcadero.com/RADStudio/XE8/en/Mobile_Tutorial:_Using_Remote_Notifications_%28iOS_and_Android%29

我正在使用 Kinvey 仪表板上的参与选项卡来发送测试推送,因此我假设服务器端是正确的。正如我所说,他们正在前台使用该应用程序。

加里

<?xml version="1.0" encoding="utf-8"?>
<!-- BEGIN_INCLUDE(manifest) -->
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="net.gwsystemsdns.net.pushtest"
    android:versionCode="1"
    android:versionName="1.0.0"
    android:installLocation="preferExternal">

<!-- This is the platform API where NativeActivity was introduced. -->
<uses-sdk android:minSdkVersion="9" android:targetSdkVersion="11" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.CALL_PHONE" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_CALENDAR" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.WRITE_CALENDAR" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<permission android:name="net.gwsystemsdns.net.pushtest.permission.C2D_MESSAGE" android:protectionLevel="signature" />
<uses-permission android:name="net.gwsystemsdns.net.pushtest.permission.C2D_MESSAGE" />
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />

<uses-feature android:glEsVersion="0x00020000" android:required="True"/>
<application android:persistent="False" 
    android:restoreAnyVersion="False" 
    android:label="PushTest" 
    android:debuggable="True" 
    android:largeHeap="False"
    android:icon="@drawable/ic_launcher"
    android:theme="@style/AppTheme"
    android:hardwareAccelerated="true">


    <!-- Our activity is a subclass of the built-in NativeActivity framework class.
         This will take care of integrating with our NDK code. -->
    <activity android:name="com.embarcadero.firemonkey.FMXNativeActivity"
            android:label="PushTest"
            android:configChanges="orientation|keyboard|keyboardHidden"
            android:launchMode="singleTask">
        <!-- Tell NativeActivity the name of our .so -->
        <meta-data android:name="android.app.lib_name"
            android:value="PushTest" />
        <intent-filter>  
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter> 
    </activity>

    <receiver android:name="com.embarcadero.firemonkey.notifications.FMXNotificationAlarm" />
    <receiver android:exported="true" android:name="com.embarcadero.gcm.notifications.GCMNotification" android:permission="com.google.android.c2dm.permission.SEND">
<intent-filter>
<action android:name="com.google.android.c2dm.intent.RECEIVE" />
<category android:name="net.gwsystemsdns.net.pushtest" />
</intent-filter>
</receiver>

</application>
</manifest>
<!-- END_INCLUDE(manifest) -->

My Push Received 事件展示了前台推送的接收。

procedure TfrmMain.PushEvents1PushReceived(Sender: TObject; const AData: TPushData);
begin
  Memo1.Lines.Add('Push Received');
  Memo1.Lines.Add('Push = ' + AData.Message);
end;

【问题讨论】:

  • 部分相关(果冻豆):stackoverflow.com/q/11614521/80901
  • > 你读过吗 - 重读一遍。我承认,当应用程序未运行时,就 firemonkey 而言,Delphi Push Received 甚至不会触发。我在 XE8 中遇到的问题是屏幕顶部没有可以点击的通知,所以即使我对启动通知感兴趣,我也无法得到它。 > 部分相关 - 有趣,但不适用,因为应用程序未处于停止状态。它只是在后台。

标签: android delphi android-intent google-cloud-messaging delphi-xe8


【解决方案1】:

我发现了问题。 XE8 清单模板文件中缺少此行:

    <%activity%>
    <service android:name="com.embarcadero.gcm.notifications.GCMIntentService" />
    <%receivers%>
</application>

它像这样进入AndroidManifest.template.xml文件(紧跟&lt;%receivers%&gt;标签:

    <%activity%>
    <service android:name="com.embarcadero.gcm.notifications.GCMIntentService" />
    <%receivers%>
    <receiver android:name="com.embarcadero.firemonkey.notifications.FMXNotificationAlarm" />
</application>

根据Embarcadero 的文档维基。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-12
    • 1970-01-01
    相关资源
    最近更新 更多