2012-12-18 30 views
6

Dịch vụ tạo một số liên tục Notification và bắt đầu hoạt động chính khi nhấp qua PendingIntent. Đây là mã.Ngăn thông báo PendingIntent bắt đầu Hoạt động đã bắt đầu?

Intent notificationIntent = new Intent(getApplicationContext(), ViewPagerActivity.class); 
PendingIntent pendingIntent = PendingIntent.getActivity(StreamingService.this, 0, notificationIntent, 0); 

Tuy nhiên, nếu hoạt động chính được bắt đầu khi tôi bấm thông báo, nó sẽ được bắt đầu lại, và một lần nữa và ...

Cuối cùng, tôi có cùng một hoạt động pilled lên, một trên đầu trang của người khác. Tôi có thể thấy điều này bằng cách nhấn nút quay lại, điều này sẽ giết hoạt động chính một lần và sau đó đưa tôi trở lại hoạt động tương tự cho đến khi tôi đóng hoạt động cuối cùng.

Làm cách nào để ngăn điều này xảy ra? Có thể PendingIntent phát hiện hoạt động nhắm mục tiêu đang chạy để nó không tạo lại hoạt động tương tự, mà là bắt đầu hoạt động không?

PS. Tôi xin lỗi nếu không thể giải thích rõ điều này. Nếu đúng như vậy, hãy cho tôi biết và tôi sẽ nhắc lại vấn đề.

+0

Hãy xem [bài đăng này] (http://stackoverflow.com/a/5631993/593709) –

+1

Câu hỏi này thực sự không liên quan gì đến thông báo; chúng chỉ là cơ chế khởi chạy hoạt động của bạn nhưng vấn đề của bạn sẽ xảy ra với bất kỳ cơ chế nào khác. Câu trả lời của @ etienne chứa đựng những gì bạn cần sửa; một tùy chọn khác là sử dụng thuộc tính android: launchMode trong tệp kê khai của bạn để đặt đúng chế độ khởi chạy cho hoạt động này. – mah

+0

@mah bạn nói đúng. Tôi sẽ sửa lỗi này. – sandalone

Trả lời

5

Tùy theo trạng thái chính xác mà bạn muốn thực hiện, bạn có thể vượt qua một trong những lá cờ như param cuối cùng của getActivity():

+0

Cảm ơn. Bạn có thể xem giải pháp của tôi không? Bất cứ điều gì bạn không thích ở đó? – sandalone

6

Tôi cũng thấy giải pháp này. Thêm thuộc tính này vào Manifest

  <activity android:name=".MyActivity" 
       android:label="@string/app_name" 
       android:launchMode="singleTop"  // <-- THIS LINE 
      > 

cho mỗi Activity bạn cần tính năng này. Cho đến nay nó hoạt động không có lỗi gì cả.

Giải pháp nào tốt hơn? Mỏ dễ hơn, nếu không có gì.

+1

Âm thanh cũng tốt. Giải pháp trước đó (Intent flags) sẽ hữu ích nếu bạn muốn sử dụng các tùy chọn khác nhau cho các trường hợp khác nhau; I E. tùy thuộc vào hành động của người dùng, bạn có thể muốn bắt đầu hoạt động theo cách khác. Nó chủ yếu phụ thuộc vào lược đồ điều hướng ứng dụng của bạn, tôi đoán vậy. – etienne

+0

+1 hữu ích cho tôi. Để làm cho câu trả lời này tốt hơn, hãy kiểm tra điều này http://developer.android.com/guide/topics/manifest/activity-element.html giải thích ai là người làm việc đơn đầu và nắm bắt ý định này về phương thức của hoạt động trênNewIntent. – BlaShadow

0

Thử sử dụng giá trị khác trong REQUEST_CODE. không sử dụng giá trị mặc định 0 trong REQUEST_CODE.

hoặc pendingIntent của bạn sẽ khởi động lại hoạt động của bạn.

nếu bạn muốn sử dụng chu kỳ hoạt động bình thường, giá trị yêu cầu đầu vào khi tạo PendingIntent.

PendingIntent resultPendingIntent = PendingIntent.getActivity(
     context, REQUEST_CODE, 
     resultIntent, 
     PendingIntent.FLAG_UPDATE_CURRENT); 
+0

"không sử dụng giá trị mặc định 0 trong REQUEST_CODE.hoặc pendingIntent của bạn sẽ khởi động lại hoạt động của bạn". hãy chia sẻ nguồn – pvllnspk

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