上下文:有一個toggleButton在「Record」和「Stop」之間切換。點擊記錄時,會創建一個通知,告訴用戶後臺服務正在運行,即使用戶已經點擊主頁按鈕等並移出應用程序。點擊通知後,用戶應該能夠進入活動並「停止」錄製並保存文件。無法恢復點擊通知的活動狀態
問題:如果我點擊的記錄(以及由此切換按鈕),然後按下home鍵,然後單擊該通知,它涉及到的活動,但切換按鈕是「記錄」而不是'停止'。即它沒有保留先前的狀態。我認爲這是因爲創建了一個新的活動實例,而不是重用現有活動實例。
代碼:
public void showRecordingNotification(){
NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this);
mBuilder.setSmallIcon(R.mipmap.ic_launcher);
mBuilder.setContentTitle("Recording in progress!");
mBuilder.setContentText("Go to the app to stop.");
Intent notificationIntent = new Intent(this, MainActivity.class);
notificationIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
PendingIntent appPendingIntent=PendingIntent.getActivity(this,0,notificationIntent,PendingIntent.FLAG_UPDATE_CURRENT);
mBuilder.setContentIntent(appPendingIntent);
Notification notification= mBuilder.build();
notification.flags = Notification.FLAG_ONGOING_EVENT | Notification.FLAG_NO_CLEAR;
mNotificationManager.notify(NOTIFICATION_ID, notification);
}
Android清單:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="space.wavicle.sensorvector2d" >
<uses-feature
android:name="android.hardware.sensor.accelerometer"
android:required="true" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name">
<service android:name=".DataLogger"/>
<activity
android:name=".MainActivity"
android:launchMode="singleTask"
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=".ReplayActivity"
android:label="@string/title_activity_replay"
android:parentActivityName=".MainActivity" >
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="space.wavicle.sensorvector2d.MainActivity" />
</activity>
</application>
</manifest>
我已經試過什麼:周圍的Googling和狩獵周圍是這樣,我發現有類似的冠冕堂皇的問題很多人,所有的解決方案似乎圍繞意圖的標誌,其中我嘗試了所有有意義的組合。我也有清單中的android:launchMode="singleTask"
(也嘗試過android:launchMode="singleInstance"
)。他們似乎都沒有做這項工作。
這使得很多道理 - 服務來判斷記錄按鈕應該打開還是關閉。我會盡力實施。然而,不應該有一種方法來通過點擊通知來獲得應用程序的保留狀態嗎?我肯定我必然遲早需要 – sudP
我編輯了我的答案,更多的信息:) – JozeRi
我一直在使用singleTask。但是我沒有重寫NewIntent()。這可能是問題嗎? (我正在閱讀你現在發送的指南) – sudP