0

ここ数日、私はAndroid API 25に追加されたアプリのショートカットをどのように起動するかを考えてみましたが、やや成功しました。これらのショートカットは、アクションの開始アクティビティです.MAYcategory.LAUNCHERまたはエクスポートされましたが、他のアクティビティは"java.lang.SecurityException:Permission Denial:"をスローしているため、Google Playミュージックの仕事のようないくつかのショートカットを開始しています。インテントを開始する "も妥当と思われます。これはPixel Launcher、Sesame Shortcutsなどのアプリがこれを行うことができるため、特別な意図のフラグなどが必要であるため、これはうまくいくようです。私はactivityInfoメタデータからこれらの値を得たAndroidスタート静的アプリのショートカット

val componentName = ComponentName("com.android.chrome", "org.chromium.chrome.browser.LauncherShortcutActivity") 
val intent = Intent(action) 
intent.component = componentName 
intent.addFlags(Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT or Intent.FLAG_ACTIVITY_CLEAR_TASK or Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_TASK_ON_HOME) 
startActivity(intent) 

:私も私のアプリ内のショートカット意図をキャッチし、それを複製するが、ここでは何の成功

が、私はGoogle Chromeの「新しいタブ」ショートカットのためにこれを行う方法の例ではありません試してみましたこれPackageManagerで取り込むことができる

答えて

1

ここでは、利用可能なすべてのショートカットの一覧を表示し、最初のショートカットが(単なる例として)であるものは何でも起動するためのコードです:

val launcherApps = context.getSystemService(Context.LAUNCHER_APPS_SERVICE) as LauncherApps 

val shortcutQuery = LauncherApps.ShortcutQuery() 
// Set these flags to match your use case, for static shortcuts only, 
// use FLAG_MATCH_MANIFEST on its own. 
shortcutQuery.setQueryFlags(LauncherApps.ShortcutQuery.FLAG_MATCH_DYNAMIC 
     or LauncherApps.ShortcutQuery.FLAG_MATCH_MANIFEST 
     or LauncherApps.ShortcutQuery.FLAG_MATCH_PINNED) 
shortcutQuery.setPackage(packageName) 

val shortcuts = try { 
    launcherApps.getShortcuts(shortcutQuery, Process.myUserHandle()) 
} catch (e: SecurityException) { 
    // This exception will be thrown if your app is not the default launcher 
    Collections.emptyList<ShortcutInfo>() 
} 

// Lists all shortcuts from the query 
shortcuts.forEach { 
    Log.d(TAG, "Shortcut found ${it.`package`}, ${it.id}") 
} 

// Starts the first shortcut, as an example (this of course is not safe like this, 
// it will crash if the list is empty, etc). 
val shortcut = shortcuts[0] 
launcherApps.startShortcut(shortcut.`package`, shortcut.id, null, null, Process.myUserHandle()) 

このコードでは、Context型の変数contextと、Stringという名前の変数packageNameがあると想定しています。


クレジット:これは、すべてこのトピックの泉ヴの仕事、彼の記事hereと対応するリポジトリhereに基づいています。

+0

ありがとう –

関連する問題