Мгновенный сбой приложения при нажатии кнопки «Попробовать сейчас»

Когда я тестирую мгновенное приложение, оно работает правильно, но после загрузки в Play Store, когда я нажимаю кнопку «Попробовать сейчас», происходит сбой приложения.

Вот мой код, когда я нажимаю кнопку «Попробовать сейчас»:

package com.journaldev.androidinstantapps.feature;

import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;

public class ActivitySplash extends Activity {


        @Override
        protected void onCreate(Bundle savedInstanceState) {

            super.onCreate(savedInstanceState);
            setContentView(R.layout.splashfeature);


            Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("https://quickeselling.com/splash"));
            intent.setPackage(getPackageName());
            intent.addCategory(Intent.CATEGORY_BROWSABLE);
            startActivity(intent);
        }
    }

В манифесте:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.journaldev.androidinstantapps.feature">

    <uses-permission android:name="android.permission.GET_ACCOUNTS" />
    <uses-permission android:name="android.permission.READ_PROFILE" />
    <uses-permission android:name="android.permission.READ_CONTACTS" />

    <application>
        <meta-data
            android:name="asset_statements"
            android:resource="@string/asset_statements" />
        <activity
            android:name=".ActivitySplash"
            android:label="@string/app_name">

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

            <meta-data
                android:name="default-url"
                android:value="https://quickeselling.com/preview" />

            <intent-filter
                android:autoVerify="true"
                android:order="1">
                <action android:name="android.intent.action.VIEW" />

                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="android.intent.category.BROWSABLE" />

                <data
                    android:host="quickeselling.com"
                    android:pathPrefix="/preview"
                    android:scheme="http" />
            </intent-filter>
            <intent-filter
                android:autoVerify="true"
                android:order="1">
                <action android:name="android.intent.action.VIEW" />

                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="android.intent.category.BROWSABLE" />

                <data
                    android:host="quickeselling.com"
                    android:pathPrefix="/preview"
                    android:scheme="https" />
            </intent-filter>

        </activity>
    </application>

</manifest>

При сопоставлении URL-адресов я открыл свое основное приложение через URL-адрес из заставки. Вот изображение сопоставления URL.

введите здесь описание изображения

Я много пробовал, но не знаю, что не так. Пожалуйста, помогите мне решить эту проблему. Вот журнал сбоя:

введите здесь описание изображения


person Neal    schedule 22.12.2018    source источник
comment
Возможно, именно так вам нужно создать намерение, stackoverflow.com/questions/14420167/   -  person Jitendar M    schedule 22.12.2018


Ответы (2)


Нажатие «Попробовать» теперь работает, и ваш ActivitySplash запускается. Как видно из трассировки стека, сбой происходит из-за второго намерения, которое вы запускаете самостоятельно в onCreate. Проблема в том, что вы указываете пакет в намерении

intent.setPackage(getPackageName());

Поскольку ваше приложение не установлено, Android не найдет ничего, что соответствовало бы этому намерению. Если действие, которое вы хотите запустить, находится в том же модуле, преобразуйте это намерение в явное, указав класс действия. В противном случае удалите setPackage, тогда Android загрузит функциональный модуль, обрабатывающий эту ссылку, и покажет его пользователю (или откроет этот URL-адрес в браузере, если не сможет найти соответствующий функциональный модуль).

Кстати, если вы хотите поддерживать и HTTP, и HTTPS в фильтрах намерений, вам не нужно дважды писать фильтр намерений. Просто добавь

<data android:scheme="https" />

к существующему HTTP-фильтру намерений, и обе схемы будут соответствовать вашей активности.

person Hassan Ibraheem    schedule 22.12.2018
comment
Я удалил строку намерения.setPackage(getPackageName()); но все равно после этой загрузки в плеймаркете выдает ту же ошибку. - person Neal; 25.12.2018
comment
Работает ли это, если вы устанавливаете мгновенное приложение прямо на свой телефон? Мгновенные приложения загружаются в Google Play через некоторое время. Вы подтвердили, что получили обновленную версию приложения? - person Hassan Ibraheem; 25.12.2018
comment
Да, это работает, когда я устанавливаю на свой телефон. На самом деле в функциональном модуле у меня просто есть экран-заставка, и я называю это намерением Intent = new Intent(Intent.ACTION_VIEW, Uri.parse(quickeselling .com/splash)); намерение.addCategory (намерение.CATEGORY_BROWSABLE); startActivity(намерение); поэтому он откроет модуль приложения, в котором доступен весь код. Так что все равно выдает ошибку, та же активность не найдена. Надеюсь, я сделал правильно - person Neal; 25.12.2018
comment
Что касается модуля «приложение». Это модуль, создающий полное приложение с помощью плагина Gradle com.android.application, верно? В этом случае его не будет в мгновенном приложении, так как вы получите там только функциональные модули. Как вы устанавливаете мгновенное приложение? В модуле мгновенного приложения есть задача gradle, которая называется sideloadDebug, если я правильно помню. - person Hassan Ibraheem; 25.12.2018
comment
Да проблема была только в этом и ее решили. Спасибо, бро. Но когда я снова загружаю приложение в магазин игр, оно выдает ошибку при открытии приложения org.apache.http.conn.HttpHostConnectException: Connection to crm.quickeselling.net отказался. когда в обычном приложении работа с этим URL идеальна. Любая идея, почему это дает ошибку в мгновенном приложении - person Neal; 16.01.2019
comment
Проверьте, используете ли вы http вместо https для этого вызова. В приложениях с мгновенным запуском запрещен весь обычный текстовый трафик. - person Hassan Ibraheem; 16.01.2019
comment
да, URL-адрес был https, и он работал, но когда приложение открывалось, оно вылетало и выдавало ошибку: Причина: android.view.InflateException: Строка двоичного файла XML № 14: Строка двоичного файла XML № 7: Ошибка преобразования класса «неизвестно» в xml в 14 строка у меня есть ‹включить макет панели инструментов - person Neal; 30.01.2019

URL-адрес, который вы пытаетесь запустить из ActivitySplash: https://quickeselling.com/splash вашего приложения с мгновенным запуском, не поддерживается в вашем приложении с мгновенным запуском (по крайней мере, не из показанных вами манифестов функций). Предоставленный вами манифест функции поддерживает только /preview.

Так что да, исключение правильное, не будет найдено никаких действий для обработки этого намерения/URL.

Теперь у вас есть снимок экрана, на котором показан ваш модуль com.android.application, поддерживающий URL-адрес /splash. Однако модуль вашего приложения не устанавливается как часть мгновенного приложения, он устанавливается только тогда, когда пользователь устанавливает полное приложение.

Ни к чему из модуля приложения нельзя получить доступ из мгновенных модулей во время его состояния в качестве мгновенного приложения, если вы думали иначе.

Чтобы это работало, вам придется переместить активность, поддерживающую /splash, в один из ваших функциональных модулей.

Это поможет вам немного понять структуру мгновенных приложений: Какие зависимости следует поместить в каждый модуль мгновенного приложения?

примечание: это не должно было работать, когда вы разрабатывали из студии, если только вы неосознанно не запускали его как установленное приложение, а не как приложение с мгновенным запуском (что выглядит так, как видно из этого снимка экрана, показывающего app в качестве выбранной сборки запуска).

person TWL    schedule 26.12.2018
comment
Я только что проверил вашу кнопку «Попробовать сейчас» и не вижу никакого сбоя, это должно означать, что ваше обновление к ответу Хасана исправило это, но вместо этого он запускает браузер для вашего /splash. Чтобы продолжить работу над своим мгновенным приложением, вам следует реорганизовать проект, как я предложил. - person TWL; 26.12.2018
comment
Да, это работает, и я изменился, но выдает org.apache.http.conn.HttpHostConnectException: Connection to crm.quickeselling.net Ошибка отказа. Хотя в обычном приложении он отлично работает с этим URL. - person Neal; 16.01.2019
comment
Мгновенные приложения разрешают только соединения https, этот ваш URL-адрес crm. * только на http. - person TWL; 16.01.2019