Android通知意图创建新实例而不是打开现有实例

时间:2014-07-24 19:45:39

标签: java android

如果我在应用程序最小化时单击我的通知,则会打开应用程序并重置UI。我想通知打开现有实例。我一直试图让它使用现有的实例。

这是我的通知代码:

        mBuilder = new NotificationCompat.Builder(getApplicationContext())
                    .setSmallIcon(R.drawable.ic_launcher)
                    .setContentTitle("Title")
                    .setContentText("Tuned in to " + radiostation);

            Intent resultIntent = new Intent(getApplicationContext(), RadioChooser.class);

            resultIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP |
                    Intent.FLAG_ACTIVITY_SINGLE_TOP |
                    Intent.FLAG_ACTIVITY_NEW_TASK);

            TaskStackBuilder stackBuilder = TaskStackBuilder.create(getApplicationContext());
            stackBuilder.addParentStack(RadioChooser.class);
            stackBuilder.addNextIntent(resultIntent);
            PendingIntent resultPendingIntent =
                    PendingIntent.getActivity(
                            getApplicationContext(), 0,
                            resultIntent, 0
                    );
            mBuilder.setContentIntent(resultPendingIntent);
            mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
            mBuilder.setOngoing(true);
            mNotificationManager.notify(1, mBuilder.build());

的AndroidManifest.xml:

<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
    <activity
        android:name=".RadioChooser"
        android:label="@string/app_name"
        android:launchMode="singleInstance"
        android:configChanges="orientation|keyboardHidden" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <service android:enabled="true" android:name=".MusicPlayer" />
</application>

1 个答案:

答案 0 :(得分:1)

好吧,无论你如何尝试这样做,如果它已被最小化(有时它不是),很可能会重新启动Activity。你需要为它做好准备才能重新开始。解决这个问题的方法是,在我们的onSaveInstanceState()方法中,存储所有与UI相关的变量。然后,在onCreateonRestoreInstanceState()中,重新初始化这些变量,并从其值中重新构建UI。因此,如果您使用片段显示应用程序的不同页面,当主要活动停止并调用onSaveInstance()时,请存储名称或编号或其在Bundle对象中{(1)的哪个片段的标识符传递。重新创建活动时,您的代码应该从onSaveInstance()中传递的包中获取这些变量,并使用它们显示正确的片段,并提供正确的信息。