如何收到外部应用程序的广播元数据?

时间:2015-08-13 21:17:28

标签: java android android-intent broadcastreceiver spotify

我正在尝试向我的应用添加一项功能,该功能从Spotify接收广播数据/意图操作并对该数据执行某些操作。但是,我不知道该怎么办。我已经能够在以前的问题的帮助下拼凑出以下代码,但是这些问题并没有详细介绍如何实际启动数据接收。我有一个BroadCast接收器:

<receiver
    android:name=".Receiver"
    android:enabled="true"
    android:exported="true">

    <intent-filter>
        <action android:name="com.spotify.music.playbackstatechanged"/>
        <action android:name="com.spotify.music.metadatachanged"/>
        <action android:name="com.spotify.music.queuechanged"/>
    </intent-filter>

</receiver>

我有一个BroadCast Receiver类(全部设置):

public class Receiver extends BroadcastReceiver {

    static final class BroadcastTypes {
        static final String SPOTIFY_PACKAGE = "com.spotify.music";
        static final String PLAYBACK_STATE_CHANGED = SPOTIFY_PACKAGE + ".playbackstatechanged";
        static final String METADATA_CHANGED = SPOTIFY_PACKAGE + ".metadatachanged";
    }

    @Override
    public void onReceive(Context context, Intent intent) {

        long timeSentInMs = intent.getLongExtra("timeSent", 0L);
        String action = intent.getAction();

        if (action.equals(BroadcastTypes.METADATA_CHANGED)) {

            String trackId = intent.getStringExtra("id");
            String artistName = intent.getStringExtra("artist");
            String albumName = intent.getStringExtra("album");
            String trackName = intent.getStringExtra("track");
            int trackLengthInSec = intent.getIntExtra("length", 0);

            //send data to main class?

        } else if (action.equals(BroadcastTypes.PLAYBACK_STATE_CHANGED)) {

           boolean playing = intent.getBooleanExtra("playing", false);
            int positionInMs = intent.getIntExtra("playbackPosition", 0);

            //send data to main class?
        }
    }
}

我的主要活动中也有以下方法:

public void mute(AudioManager audioManager){

    audioManager.setStreamMute(am.STREAM_SYSTEM, true);

}

public void unMute(AudioManager audioManager){

    audioManager.setStreamMute(am.STREAM_SYSTEM,false);

}

我希望在接收和分析来自Receiver类的BroadCast数据后调用。

摘要:

  

所以现在我不确定如何在我的主要活动中实际开始从Spotify获取数据(我是否必须手动&#34;调用&#34;我的接收器,或者它是否会自动监听广播我的主Activity正在运行时的背景)。

非常感谢详细解释,并将给予奖励。

1 个答案:

答案 0 :(得分:2)

只需要通过清单静态注册Receiver类。应用程序将自动侦听接收器意图过滤器中定义的意图动作,例如         

在接收到其中一个指定的操作后,应用程序将自动启动后台线程以运行onReceive方法。

据我所知,您可以为静态接收器注册设置所有必需的部分。

但要注意Android 3.1中的Android系统默认情况下,如果用户从未启动相应的应用程序,或者用户通过Android菜单明确停止了应用程序,则系统会将所有接收者排除在接收意图之外

同时确保Spotify启用了媒体通知:https://developer.spotify.com/technologies/spotify-android-sdk/android-media-notifications/#enabling-media-notifications