应用程序被杀死时导航到特定屏幕

时间:2018-04-05 10:08:31

标签: android android-intent android-navigation

我有三种类别的警报,其中每个类别都将导航到各自指定的屏幕。当我在广播时显示警报触发时显示本地通知。这里我保持一个额外的意图到哪个屏幕应该导航。当我调用一个活动来导航待定意图时,onNewIntent方法正在处理屏幕导航。

  private void showNotification(Context context) {
           ...

     Intent intent = new Intent(context, MainActivity.class);
 intent.putExtra("fragmentname", "firstCategory");
           ...
     }

//主要活动onNewIntent方法

 @Override
        protected void onNewIntent(Intent intent) {
            super.onNewIntent(intent);
            String screenName = intent.getStringExtra("fragmentname");
            if (screenName != null && screenName.equalsIgnoreCase("firstCategory")) {
     moveToFirstCategoryScreen();
              }
}

导航目前工作正常,直到应用程序位于前台或最近打开的应用程序中。但是,如果我从最近打开的应用程序中删除,则当通知到达时,它不会导航到特定屏幕。

在调试时,我发现了这些活动' onNewIntent方法没有调用。

当应用在后台时,我该如何处理屏幕导航。

非常感谢您的帮助!

提前致谢!

编辑06/04/2018

public class MainActivity extends AppCompatActivity {

    private static final String TAG = MainActivity.class.getName();
    private Context context;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        context = MainActivity.this;
        onNewIntent(getIntent());
}     


 @Override
 protected void onNewIntent(Intent intent) {
                super.onNewIntent(intent);
                String screenName = intent.getStringExtra("fragmentname");
                if (screenName != null && screenName.equalsIgnoreCase("firstCategory")) {
         moveToFirstCategoryScreen();
                  }
    }

 private void moveToFirstCategoryScreen() {

        Intent intent = new Intent(this, FirstCategory.class);
        startActivityForResult(intent);

    }


    }

在我的闹钟接收器中:

public class AlarmReceiver extends BroadcastReceiver {

    public static final String TAG = AlarmReceiver.class.getName();


    @Override
    public void onReceive(Context context, Intent intent) {
        PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
        PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, TAG);
        //Acquire the lock
        wl.acquire();
        showNotification(context);
        }



 private void showNotification(Context context) {
               ...

         Intent intent = new Intent(context, MainActivity.class);
     intent.putExtra("fragmentname", "firstCategory");
               ...
         }
}

清单:

...

  <activity
            android:name=".activity.MainActivity"
            android:launchMode="singleTop"
            android:screenOrientation="portrait"
             />

...

1 个答案:

答案 0 :(得分:1)

将以下代码写在MainActivity类的onCreate()方法中。

onNewIntent(getIntent())