我正在使用推送通知在我的应用中显示片段,但我的实现似乎不稳定
应用程序运行时以及应用程序未运行时有两种情况
在这两种情况下,我希望应用程序显示特定的片段
这是我的清单文件中的FragmentActivity
<activity
android:name=".Main"
android:label="@string/app_name"
android:screenOrientation="portrait"
android:theme="@style/Theme.NoBackground"
android:windowSoftInputMode="adjustPan" >
</activity>
以下是我创建通知的代码,服务在收到GCM消息时会调用该代码
private void sendNotification(String message) {
NotificationManager mNotificationManager = (NotificationManager) this
.getSystemService(Context.NOTIFICATION_SERVICE);
int requestID = (int) System.currentTimeMillis();
final PendingIntent contentIntent = PendingIntent.getActivity(
getApplicationContext(), requestID, new Intent(
getApplicationContext(), Main.class).setAction(Actions.SHOW_FRIENDS_FRAGMENT), PendingIntent.FLAG_UPDATE_CURRENT);
NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(
this)
.setSmallIcon(R.drawable.notification_icon)
.setAutoCancel(true)
.setContentText(message)
.setSound(
RingtoneManager
.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION));
mBuilder.setContentIntent(contentIntent);
mNotificationManager.notify(Util.getApp().getNotificationId(), mBuilder.build());
}
在我的活动中,我同时检查onCreate和onNewIntent
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
checkIntent(intent);
}
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
checkIntent(intent);
}
private void checkIntent(Intent i){
try{
String action = i.getAction();
if(action != null){
if(action.equalsIgnoreCase(Actions.SHOW_FRIENDS_FRAGMENT)){
showFriendsFragment();
}
}
}catch(Exception e){
}
}
问题是,如果在重新启动应用程序时在onCreate中找到操作,则操作仍然存在,因此它将始终在该页面上启动。 当在onNewIntent中找到操作时,行为不会发生,但只有在应用程序运行时才会调用此行为。
我尝试使用其他内容并在显示片段后删除它们,将待处理意图标记更改为CANCEL_CURRENT
,ONE_SHOT
但行为仍然相同。
答案 0 :(得分:2)
所以经过几天试图解决这个问题。我一直无法找到解决这个问题的传统方法,所以我使用了黑客。
public static boolean checkIntent = false
创建一个虚拟活动,当您单击通知时调用该活动
final PendingIntent contentIntent = PendingIntent.getActivity(
getApplicationContext(), requestID, new Intent(
getApplicationContext(), DummyActivity.class).putExtra("data", data), PendingIntent.FLAG_UPDATE_CURRENT);
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Intent i = getIntent();
if (i != null) {
String data = i.getStringExtra("data");
Main.checkIntent = true;
startActivity(new Intent(getBaseContext(), Main.class).putExtra(
"data", data));
}
finish();
}
最后在checkIntent方法
中private void checkIntent(Intent i){
try{
String data = i.getStringExtra("data");
if(data!= null){
checkIntent = false;
showFriendsFragment();
}
}catch(Exception e){
}
}