2012-06-28 14 views
15

Cihazdaki diğer uygulamalar yüklendiğinde veya kaldırıldığında yayın alabilen bir uygulama yapmak istiyorum.Diğer uygulamalar yüklendiğinde veya kaldırıldığında uygulamam nasıl yayınlanır?

benim kod manifset içinde

: AppListener içinde

<receiver android:name=".apps.AppListener"> 
    <intent-filter android:priority="100"> 
     <action android:name="android.intent.action.PACKAGE_INSTALL"/> 
     <action android:name="android.intent.action.PACKAGE_ADDED"/> 
     <action android:name="android.intent.action.PACKAGE_REMOVED"/> 
    </intent-filter> 
</receiver> 

:

import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.util.Log; 

public class AppListener extends BroadcastReceiver { 

@Override 
public void onReceive(Context context, Intent arg1) { 
    // TODO Auto-generated method stub 
    Log.v(TAG, "there is a broadcast"); 
    } 
} 

ama herhangi yayını alamaz. Bu sorunun uygulama izinleri, herhangi bir fikir nedeniyle olduğunu düşünüyorum?

Yardımlarınız için teşekkürler. Bildiriminize olarak

cevap

40

:

<receiver android:name=".apps.AppListener"> 
    <intent-filter android:priority="100"> 
     <action android:name="android.intent.action.PACKAGE_INSTALL"/> 
     <action android:name="android.intent.action.PACKAGE_ADDED"/> 
     <action android:name="android.intent.action.PACKAGE_REMOVED"/> 
    </intent-filter> 
</receiver> 

niyet filtre etiketinden önce satırını ekleyin

<data android:scheme="package"/> 

gibi görünmelidir Yani Manifest'inizde:

<receiver android:name=".apps.AppListener"> 
    <intent-filter android:priority="100"> 
     <action android:name="android.intent.action.PACKAGE_INSTALL"/> 
     <action android:name="android.intent.action.PACKAGE_ADDED"/> 
     <action android:name="android.intent.action.PACKAGE_REMOVED"/> 
     <data android:scheme="package"/> 
    </intent-filter> 
</receiver> 

konusunda emin değil miyim PACKAGE_REMOVED amacı aslında mevcut ise.

+0

"android.intent.extra.REPLACING" .. rup35h arg1.getDataString @ thnx –

+2

() "paketi: TheInstalledPackageName" sadece "paket gibi: com.google.joke " – wangqi060934

+0

' PACKAGE_INSTALL' işe yaramaz, kullanımdan kaldırılmış ve Google tarafından asla kullanılmamıştır: https://developer.android.com/reference/android/content/Intent.html#ACTION_PACKAGE_INSTALL – Solidak

17

android.intent.action.PACKAGE_INSTALL ürününü kullanımdan kaldırmanız ve artık önerilmez, çünkü yalnızca sistem içindir. Diğer her şey mükemmel ve ben 100 yerine, 999 koymak, belgeleri kullanmak için maksimum veya minimum sayı vermemenizi tavsiye ederim, sayı ne kadar büyükse, daha yüksek öncelikli alıcıya bu amaçla sahip olacaktır. Çevirmen için özür dilerim. İspanyolca konuşup yazarım. Sadece küçük bir şey bıraktı Information

<receiver android:name=".apps.AppListener"> 
<intent-filter android:priority="999"> 
    <action android:name="android.intent.action.PACKAGE_ADDED"/> 
    <action android:name="android.intent.action.PACKAGE_REMOVED"/> 
    <data android:scheme="package"/> 
</intent-filter> 

+0

Thanx a lot @kiddie .... –

7

Büyük Cevapları: Bu olayları görmezden istiyorsanız ACTION_PACKAGE_REMOVED ACTION_PACKAGE_ADDED- ardından denir edilecek ilk her App güncelleştirme üzerinde

, sadece ekleyin senin OnReceive() tarih:

if(!(intent.getExtras() != null && 
    intent.getExtras().containsKey(Intent.EXTRA_REPLACING) && 
    intent.getExtras().getBoolean(Intent.EXTRA_REPLACING, false))) { 

    //DO YOUR THING 
} 

Bu dokümanlardan geçerli:

3 String Bu paketin yerine geçer olduğunu belirtmek için ACTION_PACKAGE_REMOVED niyet bir boolean ekstra alan olarak kullanılmış EXTRA_REPLACING API düzeyinde eklendi EXTRA_REPLACING, bu nedenle bu yayın hemen farklı bir için bir eklenti yayını izleyecek Aynı paketin sürümü. Sabit Değer: dönecektir O +1 çalıştı

+0

Yayınımın yalnızca uygulama yüklendiğinde veya kaldırıldığında ancak uygulamanın güncellendiği zaman etkin olmadığını tetiklemesini istiyorum. Bu nasıl halledilir? –

İlgili konular