是否有恢复应用程序或再次打开它的android意图?

时间:2014-12-18 03:59:15

标签: android android-intent notifications push-notification

在我的Android应用中,此代码将打开/恢复活动

    NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);

    Intent notIntent = new Intent(context, SpeciesScreen.class);
    notIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);

    PendingIntent pIntent = PendingIntent.getActivity(context.getApplicationContext(), 0, notIntent, 0);

    Notification noti = new Notification.Builder(context)
    .setContentTitle("Scan Complete")
    .setSmallIcon(R.drawable.ic_launcher)
    .setContentIntent(pIntent)
    .setAutoCancel(true)
    .build();

    notificationManager.notify(0, noti); 

行为是,如果应用程序在SpeciesScreen上运行并最小化,它将恢复它,如果它已经运行或退出,那么它将尝试打开SpeciesScreen。注意:SpeciesScreen不是最初运行的默认活动。

但我想要的是(点击运行意图的通知时):

如果它被最小化(无论它当前在哪个活动上),只需恢复它,不要打开另一个活动。

如果它正在运行(无论其当前处于何种活动状态),请不执行任何操作。

如果已关闭,则打开应用程序,就好像您点击了主屏幕上的图标一样。

有谁知道怎么做?

由于

1 个答案:

答案 0 :(得分:0)

好的,这是我得到的黑客方式,也许有人可以改进它。

public Boolean paused = false;

@Override
protected void onPause() {
    super.onPause();
    paused = true;
}

@Override
protected void onResume() {
    super.onResume();
    paused = false;
}

private void setUpScreen() {
    if (getIntent().getExtras() != null) {
        // ran normally
    } else {
        // opened from notification

        finish();

        // open default activity
        Intent myIntent = new Intent(this, SplashScreen.class);
        startActivity(myIntent);
    }
}

在异步

@Override
protected void onPostExecute(List<CompareResult> compareResults) {


    if (context.paused) {
        showNotification();
    }
}

private void showNotification() {
    NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);

    Intent notIntent = new Intent(context, SpeciesScreen.class);
    notIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);

    PendingIntent pIntent = PendingIntent.getActivity(context.getApplicationContext(), 0, notIntent, 0);

    Notification noti = new Notification.Builder(context)
    .setContentTitle("Scan Complete")
    .setSmallIcon(R.drawable.ic_launcher)
    .setContentIntent(pIntent)
    .setAutoCancel(true)
    .build();

    notificationManager.notify(0, noti); 
}