2011-06-30 15 views
37

benim manifest'te aşağıdaki alıcıları ile uğraşan için Java kodunda registerReceiver ve unregisterReceiver kullanma hakkında biliyorum ama ben var diyelim:Android - Bildiride oluşturulan bir alıcının kaydını nasıl silebilirim?

<receiver android:name=".headsetHook"> 
     <intent-filter android:priority="99999999999"> 
      <action android:name="android.intent.action.ACTION_HEADSET_PLUG" /> 
     </intent-filter> 
    </receiver> 

Java kodunda Bunu biryere kaydını olabilecek bir yolu var mı? Bir kimlik özniteliği veya bir şey verebilir miyim ve sonra onu alabilir ve kaydını silebilir miyim? Soruyorum çünkü uygulamamın yalnızca bu eylemin gerçekleştiği ilk anda bir şeyler yapmasını istiyorum. Daha sonra bunu tekrar kaydedin ve daha sonra tekrar Java'ya kaydedin.

Umarım bunu açıkladım, herhangi bir yardım için teşekkürler.

cevap

78

Manifest'te bildirilen BroadcastReceiver'u etkinleştirmek/devre dışı bırakmak için PackageManager'u kullanabilirsiniz. Broadcast Receiver yalnızca etkin olduğunda tetiklenir.

kullanın Bileşen etkindir

ComponentName component = new ComponentName(context, MyReceiver.class); 

Kontrol eğer bu bir Bileşen oluşturmak veya özürlü

int status = context.getPackageManager().getComponentEnabledSetting(component); 
if(status == PackageManager.COMPONENT_ENABLED_STATE_ENABLED) { 
    Log.d("receiver is enabled"); 
} else if(status == PackageManager.COMPONENT_ENABLED_STATE_DISABLED) { 
    Log.d("receiver is disabled"); 
} 

//Disable 
context.getPackageManager().setComponentEnabledSetting(component, PackageManager.COMPONENT_ENABLED_STATE_DISABLED , PackageManager.DONT_KILL_APP); 
//Enable 
context.getPackageManager().setComponentEnabledSetting(component, PackageManager.COMPONENT_ENABLED_STATE_ENABLED , PackageManager.DONT_KILL_APP); 
+1

oh lanet bir patronsun. Bunu bir deneyeyim, umut verici görünüyor. – JDS

+3

Sadece not: durumunuzu da alabilirsiniz COMPONENT_ENABLED_STATE_DEFAULT –

+0

@Varun +1 Great Answer .. Güzel Çalışma .. – Venky

0
etkinleştirme/(sizin durumunuzda Yayın Alıcısı) bileşenini devre dışı bırakma

Varun'un yanıtına dayanarak bu faydacı yöntemi oluşturdum

private void unregisterReceiverFromManifest(Class<? extends BroadcastReceiver> clazz, final Context context) { 
    final ComponentName component = new ComponentName(context, clazz); 
    final int status = context.getPackageManager().getComponentEnabledSetting(component); 
    if(status == PackageManager.COMPONENT_ENABLED_STATE_ENABLED) { 
     context.getPackageManager() 
       .setComponentEnabledSetting(component, PackageManager.COMPONENT_ENABLED_STATE_DISABLED, 
        PackageManager.DONT_KILL_APP); 
     } 
    } 
İlgili konular