Pregunta

Tengo un receptor que funciona bien, pero no puedo parecen mostrar una interfaz de usuario adecuada, aunque las tostadas aparece correctamente. Por lo que yo puedo decir, esto es causado por Android que requiere la clase de extender la actividad, sin embargo, la clase ya se extiende BroadcastReceiver, por lo que no puede hacer esto. Por lo tanto, he intentado hacer un Intento, pero esto también fracasó. No hay errores, pero la pantalla no muestra. El código fuente está a continuación.?

Broadcast (Método en AndyRoidAlarm)

public void setAlarm(){
    Intent intent = new Intent(AndyRoidAlarm.this, Reciever.class);
    PendingIntent sender = PendingIntent.getBroadcast(AndyRoidAlarm.this,
                0, intent, 0);

    // We want the alarm to go off 30 seconds from now.
    Calendar calendar = Calendar.getInstance();
    calendar.setTimeInMillis(System.currentTimeMillis());
    calendar.add(Calendar.SECOND, 10);

    // Schedule the alarm!
    AlarmManager am = (AlarmManager)getSystemService(ALARM_SERVICE);
    am.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), sender);

    // Tell the user about what we did.
    if (mToast != null) {
        mToast.cancel();
    }
    mToast = Toast.makeText(AndyRoidAlarm.this, "Alarm Scheduled for 30secs", Toast.LENGTH_LONG);
    mToast.show();
}

Receptor

public class Reciever extends BroadcastReceiver
{
    @Override
    public void onReceive(Context context, Intent intent)
    {
        Toast.makeText(context, "Alarm Received", Toast.LENGTH_LONG).show();
        Intent i = new Intent();
        i.setClass(context, AlarmRing.class);
    }
}

Receptor V2

@Override
    public void onReceive(Context context, Intent intent)
    {
        Toast.makeText(context, "Alarm Received", Toast.LENGTH_LONG).show();
        Intent foo = new Intent(context, AlarmRing.class);
        //foo.putExtra("id", "id");//example, if you wish to pass custom variables
        context.startActivity(foo);
    }

AlarmRing

public class AlarmRing extends Activity {

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.alarm);

        MediaPlayer mp = MediaPlayer.create(getBaseContext(), R.raw.sweetchild);
        mp.start();
    }

Manifiesto

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.comaad.andyroidalarm"
      android:versionCode="1"
      android:versionName="1.0">
    <application android:icon="@drawable/icon" android:label="@string/app_name">
        <activity android:name=".AndyRoidAlarm"
                  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.comaad.andyroidalarm.Reciever" android:enabled="true">
            <intent-filter>
                <action android:name="com.comaad.andyroidalarm.Reciever"></action>
            </intent-filter>
        </receiver>
        <activity android:name=".AlarmRing"></activity>
    </application>
</manifest> 
}
¿Fue útil?

Solución

En un método BroadcastReceiver onReceive(), si necesita una Context (por ejemplo, para crear un Intent), utilice el Context que se pasa a usted como un parámetro de onReceive(). Incluso tiene este código en tu onReceive() -. Simplemente no está haciendo nada con el Intent resultante (por ejemplo, llamando startActivity())

Otros consejos

Intent foo = new Intent(this, AlarmRing.class);
foo.putExtra("id", id);//example, if you wish to pass custom variables
this.startActivity(foo);

Editar
Echa un vistazo a este ejemplo para utilizar BroadcastReciever dentro de una actividad. http://almondmendoza.com/2009/01/04 / getting-batería-información-on-androide /

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top