Получите от Android Broadcastreceiver до пользовательского интерфейса

StackOverflow https://stackoverflow.com/questions/2488506

  •  21-09-2019
  •  | 
  •  

Вопрос

У меня есть приемник, который работает хорошо, но я не могу показать правильный пользовательский интерфейс, хотя тост появляется правильно. Насколько я могу судить, это вызвано тем, что Android требует, чтобы класс расширил деятельность, однако класс уже расширяет Broadcastreceiver, поэтому я не могу этого сделать. Итак, я попытался сделать намерение, но это тоже не удалось. Нет ошибок, но экран не показывает. Исходный код ниже.

Трансляция (метод в 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();
}

Приемник

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

Приемник 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);
    }

Тревожный

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

Манифест

<?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> 
}
Это было полезно?

Решение

В BroadcastReceiver onReceive() Метод, если вам нужен Context (например, создать Intent), использовать Context это передается вам как параметр onReceive(). Анкет У вас даже есть этот код в вашем onReceive() - вы просто ничего не делаете с полученным Intent (например, призыв startActivity()).

Другие советы

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

Edit
Check out this example to use BroadcastReciever within an Activity. http://almondmendoza.com/2009/01/04/getting-battery-information-on-android/

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top