Андроид с глубокими ссылками - PullRequest
0 голосов
/ 08 октября 2018

Я пытаюсь реализовать глубокое связывание в своем приложении, я добавил getIntent в метод onResume своей основной деятельности, и я могу открыть свою основную деятельность по ссылке, но у меня возникают следующие проблемы.

  1. если я открою приложение, щелкнув значок приложения в первый раз, то действие намерения будет Intent.ACTION_MAIN, оно будет постоянным для всех последующих попыток, т.е. когда я откроюприложение через ссылку, intent.action должно быть Intent.ACTION_VIEW, но действие всегда ACTION_MAIN.

  2. , если приложение открывается через ссылку из Chrome, то я могусм. два экземпляра моего приложения, т.е. выше Chrome и самого моего приложения.

    <activity
        android:name=".MainActivity"
        android:hardwareAccelerated="false"
        android:launchMode="singleTop"> // I used singleTop because i have implementd isTaskRoot in my main activity
        <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:host="clip.myapp.tp"
                android:pathPattern="/.*"
                android:scheme="mhhds" />
        </intent-filter>
    </activity>
    

Ниже приведен onResume моего файла mainactivity.java, в котором я реализовал getIntent

     @Override
    protected void onResume() {

    super.onResume();


    mIntent = getIntent();

    String appLinkAction = mIntent.getAction();
    if(mIntent.getAction().equals(Intent.ACTION_VIEW)) {

        Uri data = mIntent.getData();
        String mIntentData = data.toString();

        System.out.println("Intentdata:" + mIntentData);
    }
    }

1 Ответ

0 голосов
/ 08 октября 2018

это потому, что singleTop не будет создавать новый экземпляр активности и всегда будет использовать существующий, поэтому

, если я открою приложение, щелкнув значок приложения в самый первый разтогда действие намерения будет Intent.ACTION_MAIN, оно будет постоянным для всех последующих попыток, т. е. когда я открываю приложение по ссылке, предполагается, что intent.action будет Intent.ACTION_VIEW, но действие всегда ACTION_MAIN.

По указанной причине getIntent вернет экземпляр, который был получен в первый раз, вместо переопределения onNewIntent, который вернет экземпляр последнего намерения, поэтому используйте onNewItentвместо onResume

, если приложение открывается по ссылке из Chrome, то я могу увидеть два экземпляра моего приложения, то есть над Chrome и само мое приложение

Это потому, что ваше приложение ранее было открыто как отдельное (теперь в истории стека), а теперь оно открывается в chrome как результат поиска, поэтому это нормальное поведение.

...