В приложении не установлена ​​ошибка при нажатии ярлыка приложения в Nougat 7.1.1

У меня возникли некоторые проблемы при добавлении статического ярлыка приложения в существующее приложение. Я следовал инструкциям на https://developer.android.com/guide/topics/ui/shortcuts.html и ярлык отображается, но когда я нажимаю на него, он не запускает действие, а вместо этого показывает сообщение с тостом: "Приложение не установлено".

Вот соответствующий раздел манифеста:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.mypackage">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">

        <activity
            android:name=".activities.SplashActivity"
            android:noHistory="true">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
            <meta-data
                android:name="android.app.shortcuts"
                android:resource="@xml/shortcuts" />
        </activity>

        <activity
            android:name=".activities.MainActivity"
            android:label="@string/title_activity_main"
            android:theme="@style/AppTheme.NoActionBar" />

        <activity
            android:name=".activities.ListActivity"
            android:label="@string/title_activity_list"
            android:parentActivityName=".activities.MainActivity"
            android:theme="@style/AppTheme.NoActionBar">
            <meta-data
                android:name="android.support.PARENT_ACTIVITY"
            android:value="com.mypackage.activities.MainActivity" />
        </activity>

        <activity
            android:name=".activities.NewActivity"
            android:label="@string/title_activity_new"
            android:parentActivityName=".activities.ListActivity"
            android:theme="@style/AppTheme.NoActionBar">
            <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value="com.mypackage.activities.ListActivity" />
        </activity>
    <application/>
</manifest>

Вот файл shortcuts.xml:

<shortcuts xmlns:android="http://schemas.android.com/apk/res/android">
    <shortcut
        android:shortcutId="shortcut_new_alarm"
        android:enabled="true"
        android:icon="@mipmap/ic_launcher"
        android:shortcutShortLabel="short label"
        android:shortcutLongLabel="long label"
        android:shortcutDisabledMessage="message">
        <intent
            android:action="android.intent.action.VIEW"
            android:targetPackage="com.mypackage"
        android:targetClass="com.mypackage.activities.NewActivity" />
        <!-- If your shortcut is associated with multiple intents, include them
         here. The last intent in the list determines what the user sees when
         they launch this shortcut. -->
        <categories android:name="android.shortcut.conversation" />
    </shortcut>
    <!-- Specify more shortcuts here. -->
</shortcuts>

Я уже дважды проверил и целевая деятельность полное имя com.mypackage.activities.NewActivity в порядке

Заранее спасибо!

4 ответа

Если вы установите разные productFlavors в build.gradle, вы должны убедиться, android:targetPackage является application id, android:targetClass должен включать имя пакета.

например:

<shortcut
    android:shortcutId="shortcut_id_xxx"
    android:enabled="true"
    android:icon="@drawable/shortcut_xxx"
    android:shortcutShortLabel="@string/shortcut_xxx">
    <intent
        android:action="android.intent.action.VIEW"
        android:targetPackage="com.example.app.internal"
        android:targetClass="com.example.app.MainActivity" />
    <categories android:name="android.shortcut.conversation" />
</shortcut>

productFlavors {
    internal {
        applicationId 'com.example.app.internal'
        ...
    }
}

здесь для вашей внутренней версии, targetPackage должен быть com.example.app.internal, targetClass должен быть com.example.app.MainActivity

Измени свой android:targetPackage="com.mypackage" на ваш идентификатор приложения присутствует в вашем приложении / Gradle. Надеюсь, что это поможет вам.

Просто добавь android:exported="true" в целевой тег активности в AndroidManifest.xml, а также включить INSTALL_SHORTCUT разрешение

<uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT" />
...

<activity android:name=".activity.MainActivity"
        android:exported="true" />

Вы регистрируете свой NewActivity в то время как Splash является основной активностью запуска.

 <activity
        android:name="com.mypackage.SplashActivity"
        android:label="@string/app_name"
          android:exported="true"
        android:screenOrientation="portrait" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
             <meta-data android:name="android.app.shortcuts"
             android:resource="@xml/shortcuts" />
    </activity>

Так что просто нужно убрать noHistoty и добавить android:exported="true"

Вот файл shortcuts.xml:

<shortcuts xmlns:android="http://schemas.android.com/apk/res/android">
<shortcut
    android:shortcutId="shortcut_new_alarm"
    android:enabled="true"
    android:icon="@mipmap/ic_launcher"
    android:shortcutShortLabel="short label"
    android:shortcutLongLabel="long label"
    android:shortcutDisabledMessage="message">
    <intent
        android:action="android.intent.action.VIEW"
        android:targetPackage="com.mypackage"
    android:targetClass="com.mypackage.activities.NewActivity"/>
    <!-- If your shortcut is associated with multiple intents, include them
     here. The last intent in the list determines what the user sees when
     they launch this shortcut. -->
    <categories android:name="android.shortcut.conversation" />
</shortcut>
<!-- Specify more shortcuts here. -->
</shortcuts>
Другие вопросы по тегам