Question

J'ai un récepteur qui fonctionne bien, mais je ne peux pas sembler montrer une interface appropriée, bien que le pain grillé apparaît correctement. Pour autant que je peux dire, cela est causé par Android exigeant la classe d'étendre l'activité, cependant, la classe étend déjà BroadcastReceiver, je ne peux pas le faire. Alors, j'ai essayé de faire une intention, mais cela a échoué aussi. Il n'y a pas d'erreur, mais l'écran ne montre pas. Le code source est ci-dessous.

Broadcast (Method in 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();
}

Reciever

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);
    }
}

Reciever 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();
    }

Manifest

<?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> 
}
Était-ce utile?

La solution

Dans un procédé de BroadcastReceiver de onReceive(), si vous avez besoin d'un Context (par exemple, pour créer un Intent), utilisez la Context qui est passé à vous en tant que paramètre de onReceive(). Vous avez même ce code dans votre onReceive() -. Vous êtes tout simplement pas faire quoi que ce soit avec le Intent résultant (par exemple, en appelant startActivity())

Autres conseils

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

Modifier Consultez cet exemple d'utiliser BroadcastReciever au sein d'une activité. http://almondmendoza.com/2009/01/04 / getting-batterie-information sur android /

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top