具有两个意图过滤器的活动将重新启动,但是重新启动时不会调用主意图过滤器,而会调用其他意图过滤器

时间:2018-12-04 05:53:47

标签: android android-intent

一项活动有两个目的。 android.intent.action.MAINandroid.intent.action.VIEW。现在考虑应用程序崩溃的情况,然后该应用程序将自动重新启动。但是重新启动时使用的意图不是主要的意图过滤器(android.intent.action.MAIN)。我想以此意图(android.intent.action.MAIN)重新启动应用。

这是我的意图

     <activity
        android:name=".login.Login"
        android:configChanges="orientation|keyboardHidden"
        android:windowSoftInputMode="adjustResize"
        android:launchMode="singleTask">
        .....
        .....



        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>

        <intent-filter>
            <action android:name="android.intent.action.VIEW" />
            <category android:name="android.intent.category.BROWSABLE" />
            <category android:name="android.intent.category.DEFAULT" />
            <data
                android:scheme="content"
                android:mimeType="application/octet-stream"
                android:pathPattern=".*\\.asdf"
                tools:ignore="AppLinkUrlError" />
        </intent-filter>

    </activity>

这是Oncreate()方法:

 public void onCreate(Bundle savedInstanceState) {

    if (getResources().getBoolean(R.bool.portrait_only)) {
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_NOSENSOR);
    } else {
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
    }
    super.onCreate(savedInstanceState);

        Uri data = getIntent().getData();
        if (data != null) {
            getIntent().setData(null);
            try {
                importData(data);
            } catch (Exception e) {
                // warn user about bad data here
                finish();
                return;
            }
        }
......
.....
...

}

这是onNewIntent()

    @Override
protected void onNewIntent(Intent intent) {
    super.onNewIntent(intent);

    Uri data = intent.getData();
    if (data != null) {
        getIntent().setData(null);
        try {
            importData(data);
        } catch (Exception e) {
            // warn user about bad data here
            finish();
            return;
        }
    }
}

1 个答案:

答案 0 :(得分:0)

登录活动具有以下两个意图过滤器。

<intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>

        <intent-filter>
            <action android:name="android.intent.action.VIEW" />
            <category android:name="android.intent.category.BROWSABLE" />
            <category android:name="android.intent.category.DEFAULT" />
            <category android:name="android.intent.category.LAUNCHER" />
            <data
                android:scheme="content"
                android:mimeType="application/octet-stream"
                android:pathPattern=".*\\.asdf"
                tools:ignore="AppLinkUrlError" />
        </intent-filter>

但是,当第二个意图过滤器启动Login Activity并重新启动应用程序时,它将通过第二个意图过滤器启动。那是我遇到的问题,我想做的就是在活动重新启动时使用第一个intent过滤器打开活动。

我可以通过在登录Activity`下的清单文件中添加以下行来解决此问题,如下所示。 行->

android:noHistory="true"