3 Stimmen

So starten Sie eine Aktivität über einen BroadcastReceiver

Ich arbeite derzeit an einer Alarmanwendung für Android (ja, ich weiß, dass ich nicht der einzige bin). Ich bin ziemlich neu in Android-Entwicklung, aber ich habe es geschafft, den Kern der App zu vervollständigen und alles, was ich brauche, ist 1 Sache. Um in der Lage sein, einen Alarm zu setzen (bei x-y-z Zeit) und sobald der Alarm losgeht, um eine Aktivität zu starten, auch wenn das Telefon schläft (nicht aus offensichtlich), und der Rest ist getan.

Jetzt ive lesen Sie den Entwickler-Leitfaden und ich glaube, dass der Weg zu gehen ist durch ein BroadcastReceiver und dann sollte intentSender die Aktivität zu starten, aber ich kippe scheinen, wo alle Beispiele oder ähnliche Beiträge zu finden, um zumindest eine Idee zu bekommen.

Im Moment habe ich den AlarmManager, der tatsächlich auf die Aktivität weckt, aber nur funktioniert, wenn das Telefon vollständig wach ist und überhaupt nicht, wenn es schläft, oder zumindest bis das Telefon entsperrt ist.

Irgendwelche Vorschläge? Bei Bedarf kann ich ein Code-Beispiel posten. Vielen Dank im Voraus

Update

@Joel Danke für die Antwort, Mann. Ich hatte tatsächlich über PowerManager.WakeLock gelesen, aber ich bin froh, dass Sie mich auf den Weg gebracht haben. Jetzt ist dies, was ive kommen mit für die empfangende Aktivität (es könnte falsch sein, aber mit mir tragen)

public class OnAlarmActivity extends Activity {

    MediaPlayer mpAlarm;
    MediaPlayer mpButton;
    PowerManager.WakeLock wl;

    private BroadcastReceiver theReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
            PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK, "My Tag");
            wl.acquire();
        }
    };

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.on_alarm);

        mpAlarm = MediaPlayer.create(this, R.raw.filename);
        mpAlarm.start();
        mpButton = MediaPlayer.create(this, R.raw.buttonfilename);

        ImageView imgForAlarmScreen= (ImageView)findViewById(R.id.oftheimage);
        Animation myFadeInAnimation = AnimationUtils.loadAnimation(this, R.anim.fadein);
        imgForAlarmScreen.startAnimation(myFadeInAnimation); //animation for ImageView

        Button bNextActivity = (Button)findViewById(R.id.ofthebutton);
        bNextActivity.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                mpButton.start();
                startActivity(new Intent("com.myapps.otheractivity"));
            }
        });
    }

    @Override
    protected void onStart() {
        // TODO Auto-generated method stub
        super.onStart();
    }

    @Override
    protected void onResume() {
        // TODO Auto-generated method stub
        super.onResume();
        mpAlarm.start();
    }

    @Override
    protected void onPause() {
        // TODO Auto-generated method stub
        super.onPause();
        mpAlarm.pause();
    }

    @Override
    protected void onRestart() {
        // TODO Auto-generated method stub
        super.onRestart();
        mpAlarm.start();
    }

    @Override
    protected void onStop() {
        // TODO Auto-generated method stub
        super.onStop();
        wl.release();
    }

    @Override
    protected void onDestroy() {
        // TODO Auto-generated method stub
        super.onDestroy();
        mpAlarm.release();
    }
}

Jetzt all dies und doch wird es nicht aufwachen noch sogar Ton, es sei denn, Telefon aktiv ist (wach). Irgendwelche Ideen, wie ich die Wecksperre effektiv nutzen kann?

1voto

Joel Punkte 3398

Ich glaube, der Systemdienst, den Sie benötigen, ist PowerManager.WakeLock . Suchen Sie dies auf Google oder Stack Overflow und Sie werden wahrscheinlich bekommen, was Sie brauchen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X