代码之家  ›  专栏  ›  技术社区  ›  Mojo Risin

在我的android应用程序中集成amazon mp3

  •  3
  • Mojo Risin  · 技术社区  · 16 年前

    在我的android应用程序中,我想添加用户从amazon购买歌曲的功能。我认为最简单的方法是使用amazonm3应用程序与amazon商店进行通信。我从默认音乐播放器中找到了这段代码

    Intent i = new Intent();
    i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    i.setAction(MediaStore.INTENT_ACTION_MEDIA_SEARCH);
    i.putExtra(SearchManager.QUERY, mSong.getArtits() + " " + mSong.getName());
    i.putExtra(MediaStore.EXTRA_MEDIA_ARTIST, "artist");
    i.putExtra(MediaStore.EXTRA_MEDIA_ALBUM, "album");
    i.putExtra(MediaStore.EXTRA_MEDIA_TITLE, mSong.getName());
    i.putExtra(MediaStore.EXTRA_MEDIA_FOCUS, "audio/*");
    startActivity(Intent.createChooser(i, "Search for " + mSong.getName()));
    

    其中显示的菜单选择在哪里搜索您的歌曲(浏览器,youtube,亚马逊mp3)。但这里有一些我想做的事-

    1. 我不想显示整个弹出屏幕,但只有亚马逊搜索,我应该用什么意图直接搜索亚马逊mp3。
    2. 如何将我的合作伙伴密钥发送到amazon mp3,以便在查询amazon时将其包含在内。

    2 回复  |  直到 16 年前
        1
  •  3
  •   Colin Pickard    16 年前

    它不是一个公共API;Shazam显然与Amazon有私人协议。可能值得直接联系亚马逊,因为他们有 公共API,而这一个似乎肯定符合他们的利益。但和任何大公司一样,我不会让你屏住呼吸等待回应。

        2
  •  3
  •   Thorstenvv    16 年前

    对于1.,您可以尝试通过如下方式评估匹配活动的列表来确定正确的活动(我是您创建的意图):

    List<ResolveInfo> info = getPackageManager().queryIntentActivities(i, 0);
    String packageName=null, className=null;
    for ( ResolveInfo r: info){
        if ( r.activityInfo.packageName.startsWith("com.amazon.mp3")){
            packageName=r.activityInfo.packageName;
            className=r.activityInfo.name;
            break;
        }
    }
    if ( packageName != null && className != null)
        i.setClassName(packageName, className);
    startActivity(i);
    

    这是一种黑客行为,因为人们不应该依赖以某个固定字符串开头的包名,但事实上它可能会工作很长时间。只需在代码中准备好应对它的变化(如果Amazon活动未被识别,android将自动显示activitychooser)。