3

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

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、amazon mp3)。但这里有一些我想做的事情——

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

Shazam 直接使用亚马逊 mp3,但我找不到任何信息我应该使用什么意图。在此先感谢任何帮助将非常有帮助。

4

2 回答 2

3

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

于 2010-08-31T14:35:21.507 回答
3

至于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);

这是一种 hack,因为不应该依赖以某个固定字符串开头的包名称,但实际上它可能会工作很长时间。只需准备好您的代码以处理它的变化(如果未识别 Amazon 活动,android 将自动显示活动选择器)。

至于2.,对不起,我没有这方面的信息。

于 2010-08-31T15:33:49.520 回答