Ich schrieb die Aktivität (vom Dienst aufgerufen), um Popup-Fenster zu erstellen und sowohl Aktivität als auch Dienst abgeschlossen, wenn ich auf die Schaltfläche auf dem Bildschirm klicken oder Zurück-Taste drücken. Hier ist der Code.Android - Aktivität wird nicht durch Zurück-Schaltfläche geschlossen
Service:
public class AlarmService extends Service {
@Override
public void onCreate() {
super.onCreate();
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Intent popupIntent = new Intent(AlarmService.this, AlarmPopup.class);
popupIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(popupIntent);
return super.onStartCommand(intent, flags, startId);
}
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onDestroy() {
super.onDestroy();
}
}
Aktivität:
public class AlarmPopup extends AppCompatActivity {
PopupWindow popup;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Handler handler = new Handler();
final Runnable r = new Runnable() {
public void run() {
onShowPopup();
}
};
handler.postDelayed(r, 500);
}
public void onShowPopup() {
LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
final View view = inflater.inflate(R.layout.alarm_popup, null);
popup = new PopupWindow(view, LinearLayout.LayoutParams.MATCH_PARENT,
LinearLayout.LayoutParams.MATCH_PARENT, true);
popup.setBackgroundDrawable(new BitmapDrawable());
popup.showAtLocation(view, Gravity.CENTER, 0, 0);
view.findViewById(R.id.button).setOnClickListener(mClickListener);
}
Button.OnClickListener mClickListener = new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent i = new Intent(AlarmPopup.this, AlarmService.class);
stopService(i);
popup.dismiss();
finish();
}
};
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
Intent i = new Intent(AlarmPopup.this, AlarmService.class);
stopService(i);
popup.dismiss();
finish();
return true;
}
return super.onKeyDown(keyCode, event);
}
}
Wenn ich die Taste auf dem Bildschirm gedrückt, alles gut geht, dass ich erwartet hatte. Aber wenn ich Taste gedrückt habe, schließt es nur das Popup-Fenster, und der Dienst & Aktivität ist nicht abgeschlossen. Service und Aktivität sind beendet, wenn ich noch einmal auf die Schaltfläche "Zurück" geklickt habe, aber ich möchte alle mit einem Klick beenden.
Ich habe auch versucht, diese anstelle von onKeyDown(),
@Override
public void onBackPressed() {
super.onBackPressed();
Intent i = new Intent(AlarmPopup.this, AlarmService.class);
stopService(i);
popup.dismiss();
finish();
}
Aber es funktioniert auch nicht. Was muss ich in dieser Situation tun?
Oh, noch eine Sache. Das Protokoll 'W/InputEventReceiver: Es wurde versucht, ein Eingabeereignis zu beenden, aber der Eingabeereignisempfänger wurde bereits entfernt.' wird gedruckt, als ich den Zurück-Knopf drückte. Ist das die Ursache für dieses Problem?
Oh, Danke Millionen.Dieser Code funktioniert! – Laione