Android закрепленный ярлык "Приложение не установлено" - PullRequest
0 голосов
/ 08 марта 2020

Я пишу приложение для запуска JavaScript файлов и пытаюсь добавить возможность прикрепить ярлык к файлу сценария на панели запуска.

Приложение в настоящее время работает, открывая .js файлы (по схеме content://) из пользовательского диалогового окна приложения, а также из файлового браузера устройства; однако после закрепления ярлыка на файле и щелчка по нему появляется значок с надписью «Приложение не установлено».

Соответствующий код выглядит следующим образом:

AndroidManifest. xml

    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.INSTALL_SHORTCUT"/>
    <uses-permission android:name="android.permission.UNINSTALL_SHORTCUT"/>

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <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.BROWSABLE"/>
                <category android:name="android.intent.category.DEFAULT" />
                <data android:scheme="content"/>
                <data android:mimeType="*/*"/>
                <data android:pathPattern=".*\\.js"/>
                <data android:host="*"/>
            </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="file"/>
                <data android:mimeType="*/*"/>
                <data android:pathPattern=".*\\.js"/>
                <data android:host="*"/>
            </intent-filter>
        </activity>
    </application>

MainActivity.kt

    ...

    @RequiresApi(Build.VERSION_CODES.O)
    private fun createScriptShortcut() {
        val shortcutManager: ShortcutManager? = getSystemService(ShortcutManager::class.java)
        if (shortcutManager!!.isRequestPinShortcutSupported) {
            if (engine.currentFileUri == null) {
                return
            }

            val uri: Uri = engine.currentFileUri as Uri
            val intent = Intent(
                Intent.ACTION_MAIN,
                uri,
                this,
                MainActivity::class.java
            )
            intent.type = "*/*"
            intent.data = uri
            intent.flags = Intent.FLAG_GRANT_READ_URI_PERMISSION
            intent.`package` = "io.github.ascenderx.mobilescript"
            // TODO: Create fragment to let user customize shortcut label.
            val pinShortcutInfo: ShortcutInfo = ShortcutInfo.Builder(this, "scriptShortcut")
                .setIcon(Icon.createWithResource(this, R.drawable.ic_launcher_foreground))
                .setShortLabel(uri.toString())
                .setIntent(intent)
                .build()
            shortcutManager.requestPinShortcut(pinShortcutInfo, null)
        }
    }

    ...

Чего мне не хватает? Связано ли это с типом pathPrefix или MIME (для файлов .js, по-видимому, его нет на Android)?

...