gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 20:30:57 26 4
gpt4 key购买 nike

我正在尝试向我的应用程序添加一项功能,该功能从 Spotify 接收广播数据/Intent 操作并使用该数据执行某些操作。但是,我不确定如何进行。在前面的问题的帮助下,我已经能够拼凑出以下代码,但是这些问题并没有详细说明如何实际启动数据接收。我有一个广播接收器:

<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?
}
}
}

我的主要 Activity 中还有以下方法:

public void mute(AudioManager audioManager){

audioManager.setStreamMute(am.STREAM_SYSTEM, true);

}

public void unMute(AudioManager audioManager){

audioManager.setStreamMute(am.STREAM_SYSTEM,false);

}

我想在接收和分析来 self 的 Receiver 类的 BroadCast 数据后调用它。

总结:

So now I am not sure how I can actually start the acquisition of data from Spotify in my main activity (whether I have to manually "call" my receiver, or whether it will automatically listen for Broadcasts in the background while my main Activity is running).

如有详细说明,将不胜感激。

最佳答案

只需通过 list 静态注册 Receiver 类即可。该应用程序将自动监听接收器 Intent 过滤器中定义的 Intent 操作,例如

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

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

但请注意,从 Android 3.1 开始,如果用户从未启动过相应的应用程序,或者如果用户通过 Android 菜单明确停止了该应用程序,则 Android 系统默认会将所有接收器排除在接收 Intent 之外

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

关于java - 如何接收外部应用程序的广播元数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31998592/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com