2011-07-04 28 views
16

Tôi có một ứng dụng phát phương tiện với sự trợ giúp của dịch vụ. Điều này chạy trơn tru với sự giúp đỡ của một dịch vụ (thông báo liên tục được tạo ra). Khi nhấn phím quay lại, ứng dụng sẽ chuyển sang nền. Vấn đề là khi tôi nhấp vào biểu tượng thông báo, một phiên bản mới của ứng dụng của tôi sẽ được tạo ra mỗi lần. Làm thế nào tôi có thể nhận được ứng dụng của tôi từ nền đến phía trước với sự giúp đỡ của thanh thông báo?Cách đưa ứng dụng lên phía trước khi biểu tượng thông báo được nhấp (từ Dịch vụ)?

thông báo của tôi trông như thế này:

private void notifyMe() { 
    final NotificationManager mgr = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); 
    Notification note = new Notification(R.drawable.icon_audio, "Online!", 
      System.currentTimeMillis()); 
    note.flags = Notification.FLAG_ONGOING_EVENT; 
    PendingIntent i = PendingIntent.getActivity(this, 0, new Intent(this, PlayMedia.class), 0); 
    note.setLatestEventInfo(this, "Media Payer", "Online",i); 
    mgr.notify(NOTIFY_ME_ID, note); 
} 

CÁC GIẢI PHÁP tôi đã nhận nó để làm việc bằng cách thêm dòng sau trong file manifest: android: launchMode = "singleInstance" Cờ ý định didn' t có bất kỳ ảnh hưởng nào, nghĩ rằng đó là lẻ ...

Trả lời

3

Mục đích mà bạn chuyển đến PendingIntent.getActivity cần có cờ thích hợp được đặt để đưa ứng dụng đang chạy về phía trước. Vì vậy:

Intent startActivity = new Intent(this,PlayMedia.class); 
startActivity.setFlags(Intent.*appropriate flag*); 
PendingIntent i = PendingIntent.getActivity(this, 0, startActivity, 0); 

Tới http://developer.android.com/reference/android/content/Intent.html và tìm kiếm (Ctrl + F) cho "flag_". Ở đó bạn sẽ tìm thấy một danh sách các lá cờ bạn có thể sử dụng.

+17

Đối với những người đọc câu hỏi này + câu trả lời, mặc dù người hỏi đã chấp nhận câu trả lời này là tốt nhất, nó KHÔNG phải là giải pháp giải quyết vấn đề của mình. Để có giải pháp đúng, hãy đọc phần cuối cùng của câu hỏi – Marmoy

+0

Sẽ rất tuyệt nếu anh ấy nói ở đâu trong xml bạn đặt mã này hoặc hiển thị xml. – JPM

+0

Theo như tôi nhớ, bạn đặt launchMode làm thuộc tính cho (các) thành phần hoạt động trong tệp kê khai mà bạn muốn thay đổi hành vi khởi chạy của. – Marmoy

3

Chỉ một biến thể về câu trả lời và nhận xét về câu hỏi. Tôi không cần phải thêm android: launchMode = "singleInstance" như Alpar đề xuất. Đây là những gì tôi đã làm để làm cho một ứng dụng đến với nền trước.

// this code brings the application from background to foreground 
// when the Notification icon is clicked on. 

// create new notification 
int icon = R.drawable.ic_notify; 
Notification notification = new Notification(icon, "Ticker Text", System.currentTimeMillis()); 

// Create new Intent pointing to activity you want it to come back to 
Intent notificationIntent = new Intent(this, MainApp.class); 

// Add new intent to a pending intent 
PendingIntent contentIntent = PendingIntent.getActivity(this, 0, notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT); 

// add that pendingIntent to the new notification 
notification.setLatestEventInfo(getApplicationContext(), "Title", "Text", contentIntent); 

// send the intent to the NotificationManager 
((NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE)).notify(UPLOADER_ID, notification); 
1

Tất cả điều này không hoạt động nữa trong Android 5. Tôi đã thử tất cả các đề xuất ở trên và ứng dụng của tôi tiếp tục bị hủy và khởi động lại bất cứ khi nào tôi nhấp vào thông báo.

Để khắc phục điều đó, tất cả những gì cần làm là thêm 2 lá cờ để tiếp cận mục đích:

Intent resultIntent = new Intent(context, MainActivity.class); 
resultIntent.setAction(Intent.ACTION_MAIN); 
resultIntent.addCategory(Intent.CATEGORY_LAUNCHER); 
PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, resultIntent, 0); 

này sẽ mang ứng dụng của bạn sau ra trước như thể nó đã được khai thác từ màn hình launcher.

+0

Làm việc cho tôi kết hợp với android: launchMode = "singleTask" để +1 bởi vì tất cả những người khác không –

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