2012-02-21 12 views
5

Estoy tratando de transmitir un mensaje de brindis con el siguiente código extendiendo Activity. Pero la transmisión no se recibe en otro Activity, la tostada no se muestra. ¿Alguien puede resolver mi error? La actividad principal es SendBroadcast.javaBroadcastReceiver No recibe Broadcast

import android.app.Activity; 
import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.os.Bundle; 
import android.view.View; 

public class SendBroadcast extends Activity { 

    public static String BROADCAST_ACTION = 
          "com.unitedcoders.android.broadcasttest.SHOWTOAST"; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
    } 

    public void sendBroadcast(View v) { 
     Intent broadcast = new Intent(); 
     broadcast.setAction(BROADCAST_ACTION); 
     sendBroadcast(broadcast); 
    } 
} 

tostadas Activity Display es ToastDisplay.java

import android.app.Activity; 
import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.content.IntentFilter; 
import android.widget.Toast; 

public class ToastDisplay extends Activity { 

    private BroadcastReceiver receiver = new BroadcastReceiver() { 

     @Override 
     public void onReceive(Context context, Intent intent) { 
      Toast.makeText(getApplicationContext(), "received", 
        Toast.LENGTH_SHORT).show(); 
     } 
    }; 

    @Override 
    protected void onResume() { 
     IntentFilter filter = new IntentFilter(); 
     filter.addAction(SendBroadcast.BROADCAST_ACTION); 
     registerReceiver(receiver, filter); 
     super.onResume(); 
    } 

    @Override 
    protected void onPause() { 
     unregisterReceiver(receiver); 
     super.onPause(); 
    } 
} 

y manifest.java es el siguiente

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.broad" 
    android:versionCode="1" 
    android:versionName="1.0" > 
    <uses-sdk android:minSdkVersion="3" /> 
    <uses-permission android:name="android.permission.READ_PHONE_STATE" /> 
    <application 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name" > 
     <activity 
      android:name=".SendBroadcast" 
      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=".ToastReceiver" > 
      <intent-filter> 
       <action android:name="com.unitedcoders.android.broadcasttest.SHOWTOAST" /> 
      </intent-filter> 
     </receiver> 
    </application> 
</manifest> 

Respuesta

9

No puede haber dos tipos de broacast: estático y dinámico. Estático son aquellos que están declarados en el archivo de manifiesto. La dinámica se puede declarar durante el tiempo de ejecución. Combinaste estos dos tipos de transmisión en una transmisión.

Para declarar una emisión dinámica simple, puede usar el siguiente código (que se basa en su código). Simplemente mostrará el mensaje de brindis cuando se muestre la actividad.

import android.app.Activity; 
import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.content.IntentFilter; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.View; 
import android.widget.Toast; 

public class BroadcastTestActivity extends Activity { 

    public static String BROADCAST_ACTION =  
          "com.unitedcoders.android.broadcasttest.SHOWTOAST"; 
    BroadcastReceiver br = new BroadcastReceiver() { 

     @Override 
     public void onReceive(Context context, Intent intent) { 
      Log.w("Check", "Inside On Receiver"); 
      Toast.makeText(getApplicationContext(), "received", 
        Toast.LENGTH_SHORT).show(); 
     } 
    }; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     IntentFilter filter = new IntentFilter(); 
     filter.addAction(BROADCAST_ACTION); 
     filter.addCategory(Intent.CATEGORY_DEFAULT); 
     registerReceiver(br, filter); 
    } 

    @Override 
    protected void onResume() { 
     super.onResume(); 
     sendBroadcast(); 
    } 

    @Override 
    protected void onPause() { 
     super.onPause(); 
     unregisterReceiver(br); 
    } 

    public void sendBroadcast() { 
     Intent broadcast = new Intent(); 
     broadcast.setAction(BROADCAST_ACTION); 
     broadcast.addCategory(Intent.CATEGORY_DEFAULT); 
     sendBroadcast(broadcast); 
    } 
} 

Así que ahora en lugar de mostrar la tostada puede llamar a su nueva actividad. Las siguientes acciones dependen de sus necesidades (lo que desea hacer).

+0

ok hermano ¿me puede decir que tengo que eliminar esa transmisión estática de manifiesto y puede u dame una pista de lo que será mi resto de archivos .java –

+0

Depende de lo que quieras hacer. Le mostré un ejemplo muy simple de cómo mostrar un mensaje de pan tostado que se muestra después de que se recibió la transmisión. Simplemente puede crear un nuevo proyecto y probar esta clase. – Yury

+0

en primer lugar simpley quiero mostrar TOAST dinámicamente –

0

Trate

<activity android:name=".SendBroadcast" android:label="@string/app_name"> 
    <intent-filter> 
     <action android:name="android.intent.action.MAIN" /> 
     <category android:name="android.intent.category.LAUNCHER" /> 
    </intent-filter> 
    <intent-filter> 
     <action android:name="android.intent.action.BROADCAST" /> 
    </intent-filter> 
</activity>  

En onCreate() llamada

sendBroadcast(v); 
+0

tipo no trabajar trató –

+0

hermano –

+0

que no trabaja ¿Cuál es el '

3

¿Dónde está ToastReceiver clase?

<receiver android:name=".ToastReceiver"> 
    <intent-filter> 
     <action android:name="com.unitedcoders.android.broadcasttest.SHOWTOAST"/> 
</intent-filter> 
</receiver>` 

Cambio

public class ToastDisplay extends Activity { 
    private BroadcastReceiver receiver = new BroadcastReceiver() { 

} 

a

public class ToastReceiver extends BroadcastReceiver { 

} 
+0

no funciona hermano –

-2
Button b1 = (Button)findViewById(R.id.button1); 

b1.setOnClickListener(new OnClickListener() { 
    @Override 
    public void onClick(View arg0) { 
     try { 
      String RESULT = new TestAsyncTask().execute(" ").get(); 
      System.out.println("RESULT "+RESULT); 
     } 
     catch (InterruptedException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     catch (ExecutionException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
    } 
}); 
Cuestiones relacionadas