Me gustaría crear una aplicación que responda a la recepción de mensajes SMS y mostrar un cuadro de diálogo. ¿Cómo puedo registrar el receptor en el manifiesto sin definir dentro de una actividad?Cómo crear BroadcastReceiver sin Actividad
Intenté mantener las etiquetas del receptor/filtro de intención en el manifiesto fuera de la etiqueta de actividad pero el emulador no instalará el apk ya que no hay actividad de inicio. Mantener el BroadcastReceiver como la actividad principal da como resultado un error "No se puede crear una instancia de la actividad" en el Logcat.
¿Algún ayuda?
Gracias, Sunny
clase Receptor
public class SMSReceiver extends BroadcastReceiver {
// onCreat is invoked when an sms message is received.
// Message is attached to Intent via Bundle, stored in an Object
// array in the PDU format.
public void onReceive(Context context, Intent intent) {
// get the SMS message passed in from Bundle
Bundle bundle = intent.getExtras();
String bodyText = "";
String from = "";
if (bundle != null) {
//Retrieve sms message within Object array
Object[] pdus = (Object[]) bundle.get("pdus");
SmsMessage[] msgs = new SmsMessage[pdus.length];
for (int i=0; i < msgs.length; i++)
msgs[i] = SmsMessage.createFromPdu((byte[]) pdus[i]);
for (SmsMessage message: msgs) {
bodyText = message.getMessageBody();
from = "Message from " + message.getOriginatingAddress() + ": ";
}
// Display message in pop up
Toast.makeText(context, from + bodyText, Toast.LENGTH_SHORT).show();
}
}
}
Manifiesto
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="home.splttingatms.SMSReceiver" android:versionCode="1" android:versionName="1.0">
<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".SMSReceiver"
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=".SMSReceiver">
<intent-filter>
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>
</receiver>
</application>
<uses-sdk android:minSdkVersion="7" />
<uses-permission android:name="android.permission.RECEIVE_SMS"></uses-permission>
</manifest>
he intentado hacer algo similar, en realidad aún más simple ya que todo lo que quería era hacer era conseguir una notificación en la barra de estado cuando puedo rotar la pantalla. No hay tanta suerte en el emulador. –
Ver mi respuesta en [Crear receptor de difusión sin UI] (http://stackoverflow.com/questions/22318161/start-application-without-activity-my-broadcast-receptor-not-work/33249673#33249673) –
Ver mi respuesta responder a [Crear receptor de difusión sin UI] (http://stackoverflow.com/questions/22318161/start-application-without-activity-my-broadcast-receptor-not-work/33249673#33249673) –