在 GCM onMessageReceived 上显示警报对话框?
Show Alert Dialog on GCM onMessageReceived?
我的 Android 应用程序使用 GCM。要接收消息,我执行以下操作:
public class MyGcmListenerService extends GcmListenerService {
@Override
public void onMessageReceived(String from, Bundle data) {
Intent dialogIntent = new Intent(this, DialogActivity.class);
dialogIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
dialogIntent.putExtra(DialogActivity.TITLE, title);
dialogIntent.putExtra(DialogActivity.MESSAGE, message);
startActivity(dialogIntent);
}
}
当我运行上面的代码时,我得到以下错误:
10-19 17:08:48.446 8657-8657/? E/AndroidRuntime: FATAL EXCEPTION: main
10-19 17:08:48.446 8657-8657/? E/AndroidRuntime: java.lang.RuntimeException: Unable to start activity ComponentInfo{de.majestella/de.majestella.gcm.DialogActivity}: android.util.AndroidRuntimeException: requestFeature() must be called before adding content
10-19 17:08:48.446 8657-8657/? E/AndroidRuntime: at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2092)
10-19 17:08:48.446 8657-8657/? E/AndroidRuntime: at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2117)
10-19 17:08:48.446 8657-8657/? E/AndroidRuntime: at android.app.ActivityThread.access0(ActivityThread.java:134)
10-19 17:08:48.446 8657-8657/? E/AndroidRuntime: at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1218)
10-19 17:08:48.446 8657-8657/? E/AndroidRuntime: at android.os.Handler.dispatchMessage(Handler.java:99)
10-19 17:08:48.446 8657-8657/? E/AndroidRuntime: at android.os.Looper.loop(Looper.java:137)
10-19 17:08:48.446 8657-8657/? E/AndroidRuntime: at android.app.ActivityThread.main(ActivityThread.java:4867)
10-19 17:08:48.446 8657-8657/? E/AndroidRuntime: at java.lang.reflect.Method.invokeNative(Native Method)
10-19 17:08:48.446 8657-8657/? E/AndroidRuntime: at java.lang.reflect.Method.invoke(Method.java:511)
10-19 17:08:48.446 8657-8657/? E/AndroidRuntime: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1007)
10-19 17:08:48.446 8657-8657/? E/AndroidRuntime: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:774)
10-19 17:08:48.446 8657-8657/? E/AndroidRuntime: at dalvik.system.NativeStart.main(Native Method)
10-19 17:08:48.446 8657-8657/? E/AndroidRuntime: Caused by: android.util.AndroidRuntimeException: requestFeature() must be called before adding content
10-19 17:08:48.446 8657-8657/? E/AndroidRuntime: at com.android.internal.policy.impl.PhoneWindow.requestFeature(PhoneWindow.java:275)
10-19 17:08:48.446 8657-8657/? E/AndroidRuntime: at android.app.Activity.requestWindowFeature(Activity.java:3264)
10-19 17:08:48.446 8657-8657/? E/AndroidRuntime: at de.majestella.gcm.DialogActivity.onCreate(DialogActivity.java:24)
10-19 17:08:48.446 8657-8657/? E/AndroidRuntime: at android.app.Activity.performCreate(Activity.java:5047)
10-19 17:08:48.446 8657-8657/? E/AndroidRuntime: at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1094)
10-19 17:08:48.446 8657-8657/? E/AndroidRuntime: at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2056)
10-19 17:08:48.446 8657-8657/? E/AndroidRuntime: at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2117)
10-19 17:08:48.446 8657-8657/? E/AndroidRuntime: at android.app.ActivityThread.access0(ActivityThread.java:134)
10-19 17:08:48.446 8657-8657/? E/AndroidRuntime: at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1218)
10-19 17:08:48.446 8657-8657/? E/AndroidRuntime: at android.os.Handler.dispatchMessage(Handler.java:99)
10-19 17:08:48.446 8657-8657/? E/AndroidRuntime: at android.os.Looper.loop(Looper.java:137)
10-19 17:08:48.446 8657-8657/? E/AndroidRuntime: at android.app.ActivityThread.main(ActivityThread.java:4867)
10-19 17:08:48.446 8657-8657/? E/AndroidRuntime: at java.lang.reflect.Method.invokeNative(Native Method)
如果应用程序处于前台,我如何在调用 onMessageReceived()
时显示警告对话框?
启动一个具有对话主题的activity
<activity android:theme="@android:style/Theme.Dialog" />
Android Activity as a dialog
或
您必须在您的所有活动中声明一个广播接收器,并从您的服务发送一个广播来触发和 activity 以显示对话框。
在每个 activity 的 onPause 中停止那个 activity 的广播接收器然后你知道只有当你的一个活动在前台时你才会收到警报
Caused by: android.util.AndroidRuntimeException: requestFeature() must
be called before adding content
检查您的 DialogActivity,并在 setContent 之前调用 requestFeature()
我的 Android 应用程序使用 GCM。要接收消息,我执行以下操作:
public class MyGcmListenerService extends GcmListenerService {
@Override
public void onMessageReceived(String from, Bundle data) {
Intent dialogIntent = new Intent(this, DialogActivity.class);
dialogIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
dialogIntent.putExtra(DialogActivity.TITLE, title);
dialogIntent.putExtra(DialogActivity.MESSAGE, message);
startActivity(dialogIntent);
}
}
当我运行上面的代码时,我得到以下错误:
10-19 17:08:48.446 8657-8657/? E/AndroidRuntime: FATAL EXCEPTION: main
10-19 17:08:48.446 8657-8657/? E/AndroidRuntime: java.lang.RuntimeException: Unable to start activity ComponentInfo{de.majestella/de.majestella.gcm.DialogActivity}: android.util.AndroidRuntimeException: requestFeature() must be called before adding content
10-19 17:08:48.446 8657-8657/? E/AndroidRuntime: at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2092)
10-19 17:08:48.446 8657-8657/? E/AndroidRuntime: at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2117)
10-19 17:08:48.446 8657-8657/? E/AndroidRuntime: at android.app.ActivityThread.access0(ActivityThread.java:134)
10-19 17:08:48.446 8657-8657/? E/AndroidRuntime: at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1218)
10-19 17:08:48.446 8657-8657/? E/AndroidRuntime: at android.os.Handler.dispatchMessage(Handler.java:99)
10-19 17:08:48.446 8657-8657/? E/AndroidRuntime: at android.os.Looper.loop(Looper.java:137)
10-19 17:08:48.446 8657-8657/? E/AndroidRuntime: at android.app.ActivityThread.main(ActivityThread.java:4867)
10-19 17:08:48.446 8657-8657/? E/AndroidRuntime: at java.lang.reflect.Method.invokeNative(Native Method)
10-19 17:08:48.446 8657-8657/? E/AndroidRuntime: at java.lang.reflect.Method.invoke(Method.java:511)
10-19 17:08:48.446 8657-8657/? E/AndroidRuntime: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1007)
10-19 17:08:48.446 8657-8657/? E/AndroidRuntime: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:774)
10-19 17:08:48.446 8657-8657/? E/AndroidRuntime: at dalvik.system.NativeStart.main(Native Method)
10-19 17:08:48.446 8657-8657/? E/AndroidRuntime: Caused by: android.util.AndroidRuntimeException: requestFeature() must be called before adding content
10-19 17:08:48.446 8657-8657/? E/AndroidRuntime: at com.android.internal.policy.impl.PhoneWindow.requestFeature(PhoneWindow.java:275)
10-19 17:08:48.446 8657-8657/? E/AndroidRuntime: at android.app.Activity.requestWindowFeature(Activity.java:3264)
10-19 17:08:48.446 8657-8657/? E/AndroidRuntime: at de.majestella.gcm.DialogActivity.onCreate(DialogActivity.java:24)
10-19 17:08:48.446 8657-8657/? E/AndroidRuntime: at android.app.Activity.performCreate(Activity.java:5047)
10-19 17:08:48.446 8657-8657/? E/AndroidRuntime: at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1094)
10-19 17:08:48.446 8657-8657/? E/AndroidRuntime: at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2056)
10-19 17:08:48.446 8657-8657/? E/AndroidRuntime: at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2117)
10-19 17:08:48.446 8657-8657/? E/AndroidRuntime: at android.app.ActivityThread.access0(ActivityThread.java:134)
10-19 17:08:48.446 8657-8657/? E/AndroidRuntime: at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1218)
10-19 17:08:48.446 8657-8657/? E/AndroidRuntime: at android.os.Handler.dispatchMessage(Handler.java:99)
10-19 17:08:48.446 8657-8657/? E/AndroidRuntime: at android.os.Looper.loop(Looper.java:137)
10-19 17:08:48.446 8657-8657/? E/AndroidRuntime: at android.app.ActivityThread.main(ActivityThread.java:4867)
10-19 17:08:48.446 8657-8657/? E/AndroidRuntime: at java.lang.reflect.Method.invokeNative(Native Method)
如果应用程序处于前台,我如何在调用 onMessageReceived()
时显示警告对话框?
启动一个具有对话主题的activity
<activity android:theme="@android:style/Theme.Dialog" />
Android Activity as a dialog
或
您必须在您的所有活动中声明一个广播接收器,并从您的服务发送一个广播来触发和 activity 以显示对话框。
在每个 activity 的 onPause 中停止那个 activity 的广播接收器然后你知道只有当你的一个活动在前台时你才会收到警报
Caused by: android.util.AndroidRuntimeException: requestFeature() must be called before adding content
检查您的 DialogActivity,并在 setContent 之前调用 requestFeature()