2

在此处输入图像描述我正在制作一个 android 音乐播放器应用程序,我想在其中添加一个搜索功能,这就是为什么我需要像这样实现它:

我想搜索歌曲名称并为 youtube 和所有已安装的带有歌曲标题的浏览器创建选择器,而不是为 url

我想我无法描述我的问题,所以请看下面的内容可能会帮助你理解:-

Intent intent = new Intent(Intent.ACTION_VIEW);
            intent.setData(Uri.parse("https://stackoverflow.com/"));
//here i want to set like that intent.setData("my song title")
            startActivity(Intent.createChooser(intent,"search")); 

但如果我这样做,它会告诉我 - 没有应用程序可以执行此操作

所以我不知道如何将标题作为 url 放在意图中

请记住这个用户也可以在 youtube 上搜索这个

4

1 回答 1

2

您可以使用查询开始两个单独的搜索,如下所示:

优酷搜索

Intent intent = new Intent(Intent.ACTION_SEARCH);
intent.setPackage("com.google.android.youtube");
intent.putExtra(SearchManager.QUERY, "Sunday Bloody Sunday");
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);

浏览器搜索

Intent intent = new Intent(Intent.ACTION_WEB_SEARCH);
intent.putExtra(SearchManager.QUERY, "Sunday Bloody Sunday");
startActivity(intent);

请注意,如果这首歌是众所周知的,浏览器搜索的第一个结果将是 Youtube 视频。

编辑

这是自动为 Youtube 和浏览器创建搜索查询:

private void startSearchIntent(String query) {
    List<Intent> browserIntents = new ArrayList<>();
    // Find browser intents
    List<ResolveInfo> resInfo = getPackageManager().queryIntentActivities(new Intent(Intent.ACTION_WEB_SEARCH), 0);

    // Create a search intent for each browser that was found
    for (ResolveInfo info : resInfo) {
        Intent browserIntent = new Intent(Intent.ACTION_WEB_SEARCH);
        browserIntent.putExtra(SearchManager.QUERY, query);
        browserIntent.setPackage(info.activityInfo.packageName.toLowerCase());
        browserIntents.add(browserIntent);
    }

    // Create Youtube Intent
    Intent youtubeIntent = new Intent(Intent.ACTION_SEARCH);
    youtubeIntent.setPackage("com.google.android.youtube");
    youtubeIntent.putExtra(SearchManager.QUERY, query);
    youtubeIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

    Intent chooserIntent = Intent.createChooser(youtubeIntent, query);
    chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, browserIntents.toArray(new Parcelable[]{}));
    startActivity(chooserIntent);

}

然后你只需要调用该方法:

startSearchIntent("Sunday Bloody Sunday");

希望能帮助到你。

于 2019-03-23T10:45:42.790 回答