2011-03-29 22 views
9

Çalışan bir yayın alıcısı almaya çalışıyorum. mümkün olduğunca basit olmalı, böyle benim manifestosunu vardır:Android yayın alıcısı çalışmıyor

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.mytest.intentRec" android:versionCode="1" 
    android:versionName="1.0"> 
    <application android:icon="@drawable/icon" android:label="@string/app_name" 
     android:debuggable="true"> 
     <activity android:name=".mainAct" android:label="@string/app_name"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 
       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
     <receiver android:name="com.mytest.intentRec.MyIntentRec" 
        android:enabled="true" > 
     </receiver> 
    </application> 
    <uses-sdk android:minSdkVersion="7" /> 
</manifest> 

ben bir ana bir etkinlik mainAct var görebileceğiniz gibi, bu kez başlatan yayını gönderme ama hiçbir şey yapmaz:

public class mainAct extends Activity { 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     this.sendBroadcast(new Intent()); 
    } 
} 

ve Ben geldiğince basit bir sınıf MyIntentRec vardır:

public class MyIntentRec extends BroadcastReceiver { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     Log.v("IntentRec", "got it"); 
    } 
} 

ne beklemek olduğunu ben bir yayın gönderilir ve kaldırdı ve bir günlük girişi writte olduğunu Uygulamamı başlattığınızda n. Bu giriş kaydını göremiyorum ve herhangi bir hata göremiyorum. Bildirimde ya da yayının gönderilmesinde bir hataya sahip olduğundan şüpheleniyorum. Sadece boş bir niyet yarattım, belli özelliklere sahip olmak niyetinde mi? Sadece new Intent(); yapmak için yetersizdir

cevap

7

Lütfen setClass,

EX:

ne anlama geldiğini ise
public class mainAct extends Activity { 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     Intent i=new Intent("any string"); 
     i.setClass(this, MyIntentRec.class); 
     this.sendBroadcast(i); 
    } 
} 

"Herhangi filtrelerin yokluğu sadece onun tam sınıf adını belirtmek Niyet nesneler tarafından çağrılan anlamına gelir ."

[Eski yanıt]
Bildirimde gerek duyduğunuz eylemleri kaydetmelisiniz.
Ör:

<receiver android:name="com.mytest.intentRec.MyIntentRec" android:enabled="true" > 
     <intent-filter> 
      <action android:name="your.intent" /> 
     </intent-filter> 
    </receiver> 

gönderebilir

this.sendBroadcast(new Intent("your.intent")); 
+0

bu iyi çalışıyor. Ancak yukarıdaki yorumda belirtildiği gibi. Bir niyet filtresine ihtiyacım yok. Niyet süzgeci olmadan nasıl yaparım? – AndyAndroid

1

. Bazı eylemlerle belirtmelisin. Ayrıca, manifestinizde bu belirli eylemin amaç filtresini belirtmeniz gerekir. Lütfen daha fazla here ve here okuyun.

+0

niyet filtreler android görüyoruz. – AndyAndroid

1

BroadcastReceiver'ınızın bildirisinde herhangi bir Amaç Filtresi tanımlamadınız. Özel Eylem türü için bir tane belirtin. Ayrıca, bu özel Eylem türünü, açılışta aracı olarak yayınladığınız Niyetinde tanımlamanız gerekir. senin Niyet için

+0

Amaç filtreleri için yukarıdaki yorumu inceleyin. – AndyAndroid

+0

Filtreleri kullanmak istemiyorsanız, Intent'in amacına uygun olarak niyetinizi göndermek istediğiniz bileşeni açıkça belirtmeniz gerekir. Bunu kodunda yapmıyorsun. –

+0

belki de yapmadım çünkü bilmiyorum ... btw hala bilmiyorum ... – AndyAndroid

1

işlemlerin alıcı manifest'te yakalamak gerektiğini belirtmeyi deneyin. Aşağıdaki gibi yapabilirsiniz: ihraç: http://developer.android.com/guide/topics/manifest/receiver-element.html ben olması gerekmez göre

<receiver android:name="com.mytest.intentRec.MyIntentRec"> 
    <intent-filter> 
     <action android:name="android.intent.action.MEDIA_BUTTON" /> 
    </intent-filter> 
</receiver> 
İlgili konular