Как правильно обрабатывать пользовательскую схему URL в моем приложении (избегать многократной обработки)? - PullRequest
0 голосов
/ 14 ноября 2018

Я добавил пользовательскую схему URL в свое приложение Android 4+, чтобы иметь возможность глубокой ссылки на некоторые представления / действия:

// AndroidManifest.xml
...
<activity
    android:name=".MainActivity"
    android:label="@string/app_name" >
    <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.DEFAULT"/>
        <category android:name="android.intent.category.BROWSABLE"/>
        <data android:scheme="myapp"/>
        <data android:host="webservice"/>
    </intent-filter>
</activity> 



// MainActivity
protected void onCreate(Bundle savedInstanceState) {
    Intent intent = getIntent();
    if (intent != null && Intent.ACTION_VIEW.equals(intent.getAction())) {
        Uri uri = intent.getData();
        if (uri.getScheme().equalsIgnoreCase("myapp") && uri.getHost().equalsIgnoreCase("webservice")) {
            Intent settingsIntent = new Intent(MainActivity.this, WebServiceSettingsActivity.class);
            startActivity(settingsIntent);
        }
    }
}

Это прекрасно работает, когда используется ссылка типа myapp://webservice/somethingмое приложение запускается, и отображается WebServiceSettingsActivity.

НО: При нажатии кнопки "Назад" снова отображается WebServiceSettingsActivity.Кажется, что MainActivity перезапускается с тем же намерением, что и раньше, и, таким образом, настройки отображаются снова ...

Это может повторяться бесконечно.Как это решить?

1 Ответ

0 голосов
/ 14 ноября 2018

Ваш MainActivity открывает ваш WebServiceSettingsActivity, но вы никогда не заканчиваете первый.Это оставляет вам 2 варианта:

  1. Позвонить this.finish(); сразу после вызова startActivity(settingsIntent);

Это убьет вашу MainActivity, так что после завершения не к чему будет возвращатьсяWebServiceSettingsActivity.

2 (лучше).Откройте свою активность WebServiceSettingsActivity с startActivityForResult() вместо startActivity() и завершите свою MainActivity тогда и только тогда, когда, возвращаясь из своей активности WebServiceSettingsActivity:

private static final int REQUEST_CODE_WEB = 1;

public void onCreate(Bundle savedInstance) {
    ...
    if (...) {
        startActivityForResult(settingsIntent, REQUEST_CODE_WEB);
    }
}

public void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == REQUEST_CODE_WEB) {
        finish(); // Or do whatever you want, such as load your main content
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...