2011-07-05 48 views
11

Bildirim tepsisi için bir bildirim oluşturuyorum. Böyle bir tık niyet belirterek ediyorum:Daha fazla amaç kaldıramıyorum!

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())); 

MyActivity sınıf "foo" parametresi varken gayet başlattı alır. Ancak, sonradan ekstra o kurtulmak edemez - Niyet inat görünüyor:

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

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

Yineleme Yapmak niyet anahtarları üzerinde "foo" artık var olduğunu göstermektedir. Fakat aktiviteyi arka plana koyarsam, tekrar ön plana getirirsek, "foo" parametresi tekrar mevcut olur.

Bundan nasıl kurtulacağını bilen var mı? Ben de setIntent(), aynı davranışı aramayı denedim. Bu, başlatıcının asıl amaç üzerinde tuttuğu ve yeniden kullanmaya devam etmesi gibidir.

Teşekkürler

+0

Bu Java ve işaretçiler ile aptal vakalardan biridir. Kopyalamadan sonra asıl amacı sonlandırmayı denemek zorunda kalabilirsiniz. – hwrdprkns

+0

Ah, orijinal amacı nasıl sonuçlandırır, onNewIntent() öğesinden finish() gibi bir şey yapar mıyım ve yalnızca etkinliği yeniden başlatır mıyım? Sanırım kullanıcı sinsi sıçramayı görmezdi, ve bu "foo" undan kurtulmak isterdim. Bence işe yarayabilir! – user291701

+0

'Intent.finalize()'? – hwrdprkns

cevap

0

Tam olarak Android'in yaptığı şey budur. OnNewIntent yöntemindeki amaç parametresinin değiştirilmesi, bildirim sisteminin depolanmış amacı üzerinde bir etkisi yoktur. Yeni bir Niyet yaratmalı ve etkinliğinizde yerel olarak depolamalı, başka herhangi bir veri gibi kaydedip geri yüklemelisiniz.

DÜZENLEME: Niyeti yeniden kullanmanız gerekmiyorsa, ilgili verileri ayrı ayrı depolamak daha mantıklı olacaktır.

+0

Huh Tam olarak takip etmiyorum - yeni bir Niyet yaratmak ve onunla set setntent() çağırmak mı istiyorsunuz? (Aynı davranışı veriyor gibi görünüyor). Aksi halde, bu durumu kendimiz yönetmeliyiz? Teşekkürler – user291701

+0

Oh, daha fazla değiştirilen ile bildirim çubuğunda niyetini geri koymak için çalışıyor musun? Yapılması gereken şeyin yeni bir niyet ve yeni bir bildirim oluşturması olacağını düşünüyorum. – robamaton

+7

Evet, tam olarak - Bu amacı fazladan kaldırmak istiyorum, o zaman kullanıcı başlatıcıdan bir sonraki sefer başladığında, artık gitmesini istemiyorum. Yeni bir bildirim oluşturmayı denedim ve bununla setIntent() adını çağırarak aynı davranışı yaptım - "foo" anahtarı bana eziyete geri dönüyor. – user291701

İlgili konular