Abh*_*rya 5 notifications android android-intent
我在申请中有3个主要课程
1)意图服务:我根据通知消息和其他两类行为接收推送通知和打开活动.下面是执行该操作的代码
if(Global.isMainScreenRunning){
Intent intent = new Intent(this, MainScreen.class);
intent.setFlag(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
} else if(!Global.NotificationScreenRunning){
Intent intent = new Intent(this, NotificationScreen.class);
intent.setFlag(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
}
Run Code Online (Sandbox Code Playgroud)
2)NotificationScreen:这是中介屏幕,因此如果应用程序未运行,将首先显示此屏幕,单击此屏幕的"是"按钮将打开MainScreen,此屏幕将完成.
3)主屏幕:这是显示地图的应用程序的主屏幕.它的核心行为是launchmode="singletask"在清单文件中提到的ts ,这意味着如果此屏幕正在运行,其数据将被发送到onNewIntent()方法而不是再次打开此屏幕.
现在流程中发生了什么
第1步:应用程序处于后台并推送通知.条件运行,第二个条件成功,并且拍摄通知屏幕意图
步骤2:在通知屏幕中,我点击ye按钮进入下一个主屏幕
步骤3:在主屏幕中,我处理此信息并执行任务或仅关闭应用程序
步骤4:再次接收新通知并且当应用程序未运行时进入第二条件并启动通知屏幕的意图但此时没有启动通知屏幕而不是提供其意图并且启动主屏幕是错误的.
这是我所面临的异常行为,而不是为意图主屏幕提供通知屏幕类别,这是根据android的完全不同的应用程序行为.
任何遇到此类问题的人的任何帮助将不胜感激.
编辑
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.app"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="15"
android:targetSdkVersion="18" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.front" />
<uses-feature android:name="android.hardware.camera.autofocus" />
<uses-feature android:name="android.hardware.microphone" />
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
<permission android:name="com.example.app.permission.C2D_MESSAGE"
android:protectionLevel="signature" />
<uses-permission android:name="com.example.app.permission.C2D_MESSAGE" />
<supports-screens
android:largeScreens="true"
android:normalScreens="true"
android:smallScreens="true"
android:xlargeScreens="true" />
<application
android:allowBackup="true"
android:icon="@drawable/android_app_icon"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".SplashScreen"
android:configChanges="keyboardHidden|orientation"
android:label="@string/app_name"
android:screenOrientation="portrait" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".MainScreen"
android:configChanges="keyboardHidden|orientation"
android:launchMode="singleTask"
android:excludeFromRecents="true"
android:screenOrientation="portrait" >
</activity>
<activity
android:name=".NotificationScreen"
android:configChanges="keyboardHidden|orientation"
android:excludeFromRecents="true"
android:screenOrientation="portrait" >
</activity>
<receiver
android:name=".pushnotification.GcmBroadcastReceiver"
android:permission="com.google.android.c2dm.permission.SEND" >
<intent-filter>
<action android:name="com.google.android.c2dm.intent.RECEIVE" />
<category android:name="com.selebrety.app" />
</intent-filter>
</receiver>
<service android:name=".pushnotification.GcmIntentService" />
<meta-data android:name="com.google.android.gms.version"
android:value="@integer/google_play_services_version" />
</application>
</manifest>
Run Code Online (Sandbox Code Playgroud)
第二次编辑
我正在测试的手机是"YU Yureka",这里是它的规格链接.目前它有Android 5.0.2操作系统
第三编辑
为了测试这种行为,我调试了eclipse调试器中的代码.要检查这个我已经把一个破发点中NotificationScreen onResume和onCreate,但它从来没有打,而不是onResume中MainScreen被击中.
此外,我添加了一个登录if和else条件,但仍打印其他条件的日志.
四编辑
Global.isMainScreenRunning:是全局boolean变量这样做是为了虚假onPause的MainScreen,做真正的onResume的MainScreen.
Global.NotificationScreenRunning:是全局boolean变量这样做是为了虚假onPause的NotificationScreen,做真正的onResume的NotificationScreen.
Pro*_*ate -1
嗨@Abhinbav Singh Maurya
我认为问题是主屏幕是从清单中声明为应用程序启动屏幕的启动屏幕调用的,因此当应用程序被终止并且您正在调用意图时,它将被调用。
相反,您可以做的是将消息广播到启动屏幕并在启动屏幕中接收它,并根据条件从那里调用意图。
同样,这里有一件你应该注意的事情,只有在接收者在 SplahScreen 中注册之后,你才必须广播意图,否则它永远不会被接收到。所以尝试使用 handler.postDelayed 方法并在 1000 毫秒或 700 毫秒后广播。
Intent mIntent = new Intent(context, SplashScreen.class);
mIntent.setAction(Intent.ACTION_MAIN);
mIntent.addCategory(Intent.CATEGORY_LAUNCHER);
mIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(mIntent);
broadcastMessage(context, message);
Run Code Online (Sandbox Code Playgroud)
我在下面的帖子中回答了类似的问题。 这里
我想这就是您正在寻找的。请告诉我这是否满足您的要求,如果您觉得答案有用,如果我的答案对您有帮助,请对答案进行投票,以便对其他人有用。
干杯:)
编辑
我对此做了一些研究。
根据此链接,您可以有两个启动器活动。
尝试一下并告诉我。希望这对您有帮助。:)
| 归档时间: |
|
| 查看次数: |
1164 次 |
| 最近记录: |