Tôi đang chặn tin nhắn sms với một số thông tin trong đó. Sau đó, trong SmsListener của tôi, tôi đang tạo thông báo để hiển thị trong thanh trạng thái. Sau đó, khi người dùng nhấp vào một thông báo tôi muốnLàm cách nào để đưa Hoạt động lên nền trước (hoặc tạo nếu không tồn tại)?
- Mang MainActivity để foreground (Nếu hoạt động như vậy không tồn tại nhưng nó nên được tạo ra)
- Pass để nó dữ liệu từ sms
- Thực hiện một số giao diện người dùng thay đổi dựa trên dữ liệu này trong MainActivity này
hoạt động của tôi được định nghĩa là
<activity
android:name=".MainActivity"
android:screenOrientation="sensor"
android:label="@string/app_name"
android:launchMode="singleTask"/>
Hoạt động được đưa ra như
Intent i = new Intent();
i.setClass(context, MainActivity.class);
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(i);
Cũng trong hoạt động của tôi, tôi đã ghi đè phương pháp onNewActivity
@Override
public void onNewIntent(Intent intent){
super.onNewIntent(intent);
// I have data from broadcast in intent variable passed to this activity
processDataFromBroadcast(intent);
}
Nó hoạt động tốt nếu MainActivity đã tồn tại nhưng nếu MainActivity không tồn tại nó được bắt đầu tuy nhiên onNewIntent không được gọi là
Sau đó, tôi đã cố gắng gọi processDataFromBroadcast từ onCreate: processDataFromBroadcast(getIntent())
. Dữ liệu thời gian đầu tiên được truyền chính xác từ chương trình phát sóng của tôi đến hoạt động. Tuy nhiên nếu MainActivity được gửi đến nền và sau đó lại được đưa đến foreground hoặc onCreate hoặc onNewIntent được gọi và processDataFromBroadcast được thực hiện lại với mục đích được gửi bởi phát sóng và do đó MainActivity của tôi được cập nhật với dữ liệu từ phát sóng mọi thời gian ứng dụng được đưa vào nền trước - thứ hai là không mong muốn, làm thế nào tôi có thể làm cho hoạt động của tôi quên đi ý định này sau lần xử lý đầu tiên. Here is sample application.
Cảm ơn bạn đã trả lời. Tuy nhiên, vui lòng xem nội dung cập nhật của tôi cho câu hỏi. – Solvek
Hoạt động có phương thức getIntent() để truy lục mục đích đã kích hoạt hoạt động. Nếu bạn chỉ muốn xử lý ý định trên instantiation đầu tiên, bạn có thể làm điều này từ onCreate(). Như bạn có thể biết, onCreate() chỉ được gọi khi hoạt động chưa có trong bộ nhớ. – rogerkk
Hmm, xin lỗi, tôi thấy tôi không đọc bản cập nhật của bạn đúng cách như bạn đã thử. Tôi đang làm khá nhiều chính xác những gì bạn đang làm trong một trong các ứng dụng của tôi, và sự khác biệt duy nhất tôi có thể thấy ngay bây giờ là tôi đang sử dụng singleInstance launchmode và đã đặt android: alwaysRetainTaskState thành true. My onCreate() chắc chắn không được kích hoạt khi mở lại hoạt động. – rogerkk