2011-07-05 22 views
11

Tôi đang tạo thông báo cho khay thông báo. Tôi đang chỉ định mục đích nhấp như thế này:Không thể xóa thêm ý định!

Intent intent = new Intent(context, MyActivity.class); 
intent.putExtra("foo", true); 
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); 
intent.setData(Uri.parse("" + System.currentTimeMillis())); 

Lớp MyActivity được khởi chạy tốt với thông số "foo" hiện tại. Tuy nhiên, tôi không thể loại bỏ điều đó thêm sau đó - dường như vẫn tồn tại trong Mục đích:

// MyActivity 
public void onNewIntent(Intent intent) { 
    super.onNewIntent(intent); 

    // please go away.. 
    intent.removeExtra("foo"); 
    getIntent().removeExtra("foo"); 
} 

Lặp lại các phím của ý định cho thấy rằng "foo" không còn tồn tại nữa. Nhưng nếu tôi nền hoạt động, sau đó đưa nó vào nền trước một lần nữa, các "foo" tham số có mặt một lần nữa.

Bất kỳ ai biết cách thực sự loại bỏ nó? Tôi cũng đã thử gọi setIntent(), cùng một hành vi. Nó giống như các phóng giữ vào ý định ban đầu và tiếp tục tái sử dụng nó.

Cảm ơn

+0

Đây là một trong những trường hợp ngớ ngẩn với Java và con trỏ. Bạn có thể phải cố gắng hoàn thành ý định ban đầu sau khi sao chép nó mà không có foo. – hwrdprkns

+0

Ah làm thế nào để hoàn thành ý định ban đầu, tôi sẽ làm một cái gì đó như gọi kết thúc() từ onNewIntent(), và chỉ cần khởi chạy lại hoạt động một lần nữa? Tôi đoán người dùng sẽ không nhìn thấy bước nhảy lén lút, và tôi sẽ loại bỏ thêm "foo" đó. Tôi nghĩ nó có thể làm việc! – user291701

+0

'Intent.finalize()'? – hwrdprkns

Trả lời

0

Đó chính xác là những gì Android đang làm. Sửa đổi tham số intent trong phương thức onNewIntent không ảnh hưởng đến ý định được lưu trữ của hệ thống thông báo. Bạn nên tạo một Intent mới và lưu trữ cục bộ trong hoạt động của mình, lưu và khôi phục nó như bất kỳ dữ liệu nào khác.

CHỈNH SỬA: Nếu bạn không cần phải sử dụng lại mục đích, có thể sẽ có ý nghĩa hơn khi lưu trữ dữ liệu liên quan một cách riêng biệt.

+0

Huh Tôi không hoàn toàn theo dõi - ý bạn là tạo ra một Intent mới và gọi setIntent() với nó? (dường như cung cấp cho cùng một hành vi). Nếu không, chúng ta phải tự mình quản lý trạng thái này? Cảm ơn – user291701

+0

Ồ, bạn đang cố gắng đưa ý định trở lại vào thanh thông báo có thay đổi thêm không? Tôi nghĩ rằng điều thích hợp để làm là tạo ra một ý định mới và một thông báo mới. – robamaton

+7

Vâng chính xác - Tôi muốn loại bỏ ý định đó thêm, sau đó lần sau khi người dùng khởi chạy từ trình khởi chạy, tôi muốn có thêm tính năng này. Tôi đã thử tạo một thông báo mới và được gọi là setIntent() với nó, nhưng hành vi tương tự - phím "foo" quay trở lại để hành hạ tôi. – user291701

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