如何在按下(andorid)主页按钮时显示通知(背景)

时间:2016-07-06 17:04:04

标签: java android android-studio notifications

我有应用程序在每个Chrono.change中发送通知(目前为测试目的)。当我在开发功能的MainActivity上工作时它工作正常。但它不会处理任何其他活动或按下HOME按钮时。如果按下POWER按钮,应用程序在后台运行并且工作正常(如果在MainActivity上按下POWER按钮)。

任何想法如何解决这两个问题:

1)如果我正在进行另一项活动,也会发送通知

2)更关键 - 即使按下HOME按钮并且我当前不在app中,也会发送通知。

eventL istener:

 stopWatch.setOnChronometerTickListener(new Chronometer.OnChronometerTickListener() {
        @Override
        public void onChronometerTick(Chronometer chronometer) {
            turnedOnOff = prefs.getBoolean("notification",false);
            if (turnedOnOff)
                throwNotification();
        }
    });

Nottifications:

 public void throwNotification()
{
    // Prepare intent which is triggered if the
    // notification is selected
    Intent intent = new Intent(this, MainActivity.class);
    intent.setAction(Intent.ACTION_MAIN);
    intent.addCategory(Intent.CATEGORY_LAUNCHER);


    PendingIntent pendingIntent = PendingIntent.getActivity(this, 0,
            intent, 0);

    // Build notification
    // Actions are just fake
    Notification noti = new Notification.Builder(this)
            .setContentTitle("Finish!")
            .setContentText("Its done").setSmallIcon(R.mipmap.notif)
            .setContentIntent(pendingIntent)
                    .build();

    NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
    // hide the notification after its selected
    noti.flags |= Notification.FLAG_AUTO_CANCEL;
    noti.defaults |= Notification.DEFAULT_SOUND;
    noti.defaults |= Notification.DEFAULT_VIBRATE;

    notificationManager.notify(0, noti);
    }

万分感谢!

1 个答案:

答案 0 :(得分:0)

回答@Raghunandan

这是不可能的。

除非您将应用设置为主屏幕,否则无法拦截Android上的主页按钮。这是出于安全原因,因此恶意应用程序无法通过覆盖可以退出的所有按钮来接管您的设备。

如果您想处理HOME按钮,请实现主屏幕。

但我建议你重新考虑你的设计。将退出选项留给用户。

http://developer.android.com/training/design-navigation/index.html

查看Gmail应用程序。当您按主页按钮时,它不会注销。

@Override 
protected void onUserLeaveHint()  
{ 
        super.onUserLeaveHint();
        Toast.makeText(this, "You pressed the home button!", Toast.LENGTH_LONG).show();
        Log.i("Home button Pressed!", "Yes");
        finish(); 
 }

您可以使用onUserLeaveHint

protected void onUserLeaveHint()

在API级别3中添加

当活动即将作为用户选择的结果进入后台时,被称为活动生命周期的一部分。例如,当用户按下Home键时,将调用onUserLeaveHint(),但是当传入的电话呼叫导致调用中的Activity自动被带到前台时,onUserLeaveHint()将不会被调用的活动被调用。在调用它的情况下,在活动的onPause()回调之前调用此方法。

此回调和onUserInteraction()旨在帮助活动智能地管理状态栏通知;特别是,帮助活动确定取消通知的适当时间。