2010-06-02 41 views
6

Tôi nhận được ứng dụng có tab và mục nhập thanh thông báo, khi tôi gửi nó lên nền (nhấp vào nút trang chủ) và cố gắng mở lại ứng dụng bằng cách nhấp vào thanh thông báo, khởi động lại ứng dụng (tab được chọn gần đây nhất).mở lại ứng dụng nền thông qua mục thông báo

Khi tôi giữ nút home nếu ứng dụng là trong nền và chọn nó từ đó hoặc nhấp biểu tượng ứng dụng trên màn hình chính, trạng thái trước đó là phục hồi mỗi mặc định (tab chọn đúng)

IMO mục đích của thông báo là sai, nhưng tôi là không chắc chắn cách khắc phục.

Tóm lại: Cách tải ứng dụng nền về nền trước khi tôi nhấp vào mục nhập thông báo?

thx!

+0

Lưu ý rằng việc kích hoạt 'Intent' từ một thông báo sẽ luôn tạo một phiên bản mới của' Hoạt động'; bạn không thể quay trở lại trực tiếp đến một cá thể hiện có. Trên đỉnh đầu của tôi, tôi tin rằng bạn có thể sử dụng một trong các cờ như CLEAR_TOP (và 'onNewIntent' trong' Hoạt động') để đảm bảo rằng phiên bản hiện tại được giữ lại. –

Trả lời

0

Bạn đang triển khai thực hiện các phương pháp onSaveInstanceState theo khuyến cáo trong lifecycle documentation?

thể của nó là khi bạn tạm dừng một ứng dụng và quay trở lại nó ngay lập tức, mà ứng dụng vẫn còn treo ra trong bộ nhớ ở chế độ nền. Tuy nhiên, bạn không thể phụ thuộc vào điều này, vì vậy bạn nên lưu trạng thái như tab hiện đang mở mỗi khi bạn đi vào nền và khôi phục lại khi bạn được kích hoạt lại.

8

Đặt hai dòng này. Điều này sẽ tiếp tục hoạt động hiện bị tạm dừng:

notificationIntent.setAction(Intent.ACTION_MAIN); 
notificationIntent.addCategory(Intent.CATEGORY_LAUNCHER); 
+2

Nó hoạt động rất tốt. Nhưng sử dụng tốt hơn hằng số notifyIntent.setAction (Intent.ACTION_MAIN); notifyIntent.addCategory (Intent.CATEGORY_LAUNCHER); – garmax1

4
Intent intent = new Intent(Application.getContext(), ActivityHome.class); 
intent.setAction("android.intent.action.MAIN"); 
intent.addCategory("android.intent.category.LAUNCHER"); 
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); 
Application.getContext().startActivity(intent); 
1
public static boolean isApplicationRunningBackground(final Context context) { 
    ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE); 
    List<RunningTaskInfo> tasks = am.getRunningTasks(am.getRunningAppProcesses().size()); 
    for (RunningTaskInfo runningTaskInfo : tasks) { 
     if (runningTaskInfo.topActivity.getPackageName().equals(context.getPackageName())) { 
      MyLog.i("UTIL", "packageName:" + runningTaskInfo.topActivity.getPackageName()); 
      MyLog.i("UTIL", "className" + runningTaskInfo.topActivity.getClassName()); 
      return true; 
     } 
    } 
    return false; 
} 

Intent notificationIntent; 
     if (Util.isApplicationRunningBackground(context)) { 
      notificationIntent = new Intent(context, MainView.class); 
     } else { 
      notificationIntent = new Intent(context, Splash.class); 
     } 
0

sử dụng hai lá cờ trong ý định

intent.setFlags(Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT | Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); 
2

tôi đã phải đối mặt với cùng một vấn đề và tìm kiếm kịch liệt cho một câu trả lời nhưng đây là sự lừa: Thay vì cố gắng khởi động lại ứng dụng với trạng thái đã lưu bằng cách sử dụng ý định thông báo của bạn, hãy mở hoạt động trống bằng cách sử dụng mục đích thông báo và trong phương thức onCreate() của hoạt động, chỉ cần hoàn thành() nó. Thao tác này sẽ đưa bạn trở lại hoạt động được xem lần cuối trên ứng dụng.

Các vấn đề liên quan