我已经花了两天时间在这上面并且无处可去.我正在尝试使用[MPMusicPlayerController applicationMusicPlayer]播放从用户的iPod库中选择的音频,让它在后台运行并支持远程事件.现在让音乐真正播放是很容易的部分.获取实例,选择歌曲,分配音乐队列并播放.做完了.但是...... a)我不能让它在后台播放,而b)即使在前台我也无法让遥控器事件发挥作用!
在你问之前,是的,我已经设置了plist条目,音频会话类别,打电话说我有兴趣获得远程事件并设置第一响应者来听取它们,所以请知道,是的,我我读过我能找到的关于这个主题的每一个文件*(*一个任务我责怪Apple因为在这个主题上根本不清楚,也没有任何示例代码!)我看过每一个与之相关的WWDC视频(甚至冻结屏幕以完全从他们的示例复制代码......)所以,除非我错过了不在此列表中的内容,否则回复任何这些答案都无济于事.
还有一件事......我明确地谈到使用根据文档的MPMusicPlayerController,从不使用应用程序会话.它始终使用系统会话.(也许这本身就回答了我的问题,但是文档没有明确说明,所以我不确定,因此这个问题.)
也就是说,两天后,我的想法是这样的:
使用MPMusicPlayerController时,无论您调用哪种方法或设置了哪些plist条目,您的应用程序都不会在后台运行.期.如果您使用ipodMusicPlayer实例,音乐会继续播放,但这是因为它是正在播放的iPod,而不是您的应用.如果您使用的是applicationMusicPlayer实例,那么在转到后台时您的音乐会停止.在这两种情况下,您的应用都会被暂停
无论您使用ipodMusicPlayer还是applicationMusicPlayer实例,所有远程事件都会转到iPod应用程序本身,而不是您的应用程序,即使您明确要求它们也是如此.如果您正在使用applicationMusicPlayer实例并使用遥控器选择"播放",则iPod应用程序会收到命令,以便您的音频消失并中断并在iPod应用程序中开始播放.如果您选择了ipodMusicPlayer,那么当然它并不重要,因为您已明确表示您基本上只对远程控制iPod应用程序感兴趣,这也是实际接收远程事件的内容.
底部快速切换控件中的图标永远不会更改为应用程序的图标,因为再次,您的应用程序实际上从未设置为接收事件.iPod应用程序,这就是它的图标出现在那里的原因.
所以我想知道的是......我错了吗?有没有人成功地使用MPMusicPlayerController并能够拦截远程事件?虽然我更喜欢使用带有背景音乐支持的applicationMusicPlayer,所以我不会使用用户的iPod,更重要的是远程控制通知,这意味着如果我必须使用ipodMusicControl并将我的应用程序放在前台来拦截那些消息,就这样吧.这样丑陋,但至少它是一些东西.
代码示例,或至少针对其中一个内置应用模板的明确步骤将非常感激.(甚至不需要实施......只是步骤.希望这将安抚不可避免的'它仍然在NDA'的事情,人们一直在回答问题.)
标记
ipod remote-control background-application mpmusicplayercontroller ios4
在我的应用程序中,我希望让用户在后台控制音频播放.我在.plist中设置了backGround模式,在bg中播放就像我想要的那样.但是我无法通过触摸控制按钮得到任何响应.
我设置了AudioSession这样的
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil];
[[AVAudioSession sharedInstance]setActive:YES error:nil];
Run Code Online (Sandbox Code Playgroud)
然后,在我放置播放器的viewContoller中,我beginReceivingRemoteControlEvents喜欢这个
if ([[UIApplication sharedApplication] respondsToSelector:@selector(beginReceivingRemoteControlEvents)]){
[[UIApplication sharedApplication] beginReceivingRemoteControlEvents];
[[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:NULL];
[self becomeFirstResponder];
NSLog(@"Responds!");
}
Run Code Online (Sandbox Code Playgroud)
它打印出来 Responds!
但问题是这种方法永远不会被调用
- (void)remoteControlReceivedWithEvent:(UIEvent *)event
{
NSLog(@"Where is my event?");
if(event.type == UIEventTypeRemoteControl)
{
switch (event.subtype) {
case UIEventSubtypeRemoteControlTogglePlayPause:
NSLog(@"Pause");
[self playWords:playButton];
break;
case UIEventSubtypeRemoteControlNextTrack:
NSLog(@"Next");
[self next];
break;
case UIEventSubtypeRemoteControlPreviousTrack:
NSLog(@"Prev");
[self prev];
break;
}
}
Run Code Online (Sandbox Code Playgroud)
我甚至尝试写一个类别UIApplication让它成为第一个响应者,但它没有帮助
@implementation UIApplication (RemoteEvents)
-(BOOL)canBecomeFirstResponder
{
return YES;
}
@end
Run Code Online (Sandbox Code Playgroud)
为什么会这样?
解决方案 …
我正在尝试RemoteControlClient设置,以便我的应用程序的音乐可以通过锁定屏幕上弹出的小部件(如SoundCloud,Google Play音乐和其他音乐/视频应用程序工作)进行控制.我不确定我的代码有什么问题以及为什么它没有正确挂钩,但这是我到目前为止所拥有的...
一个名为MusicService的类,它尝试处理RemoteControlClient的更新
public class MusicService extends Service
{
public static final String ACTION_PLAY = "com.stfi.music.action.PLAY";
private RemoteController controller = null;
@Override
public void onCreate()
{
super.onCreate();
System.out.println("Creating the service.");
if(controller == null)
{
controller = new RemoteController();
}
}
@Override
public int onStartCommand(Intent intent, int flags, int startId)
{
String action = intent.getAction();
System.out.println("Got an action of " + action);
/* Logic to get my Song cur */
controller.register(this);
controller.updateMetaData(cur);
return START_STICKY;
}
@Override
public void onDestroy() …Run Code Online (Sandbox Code Playgroud) 我想在Eclipse Luna(Windows - > Linux)中进行交叉编译,但是当我想在远程系统视图中添加连接时, 列表为空
我在Eclipse中安装了最新的RSE.也许我错过了一个我不知道的重点,这就是为什么它是空的.
有什么建议?谢谢!
我正在开发一个监听语音命令的应用程序,通过遥控器(Airpods或有线耳机)开始/停止收听语音命令的方式.我用AVAudioSession和尝试了各种AVAudioSession选项,AVAudioSessionCategoryRecord并得到以下结果:
每当默认输入是蓝牙(Airpod)麦克风(AVAudioSessionCategoryPlayAndRecord)时,应用程序不会接收远程控制事件.只要默认输入是内置麦克风或有线耳机,应用程序就会接收远程控制事件.
有谁知道是否可以启用蓝牙麦克风并接收遥控事件?
我在iOS 11.0.1和11.0.3上测试过.
我正在构建一个流媒体Android应用程序,我正在尝试集成一个远程控制客户端(例如,从ICS +上的锁定屏幕获得一个控件).
为此,我在启动流媒体服务时这样做:
int result = audioManager.requestAudioFocus(this, AudioManager.STREAM_MUSIC, AudioManager.AUDIOFOCUS_GAIN);
if (result != AudioManager.AUDIOFOCUS_REQUEST_GRANTED) {
stopSelf();
}
mediaButtonReceiverComponent = new ComponentName(this, RemoteControlReceiver.class);
audioManager.registerMediaButtonEventReceiver(mediaButtonReceiverComponent);
if (remoteControlClientCompat == null) {
final Intent mediaButtonIntent = new Intent(Intent.ACTION_MEDIA_BUTTON);
mediaButtonIntent.setComponent(mediaButtonReceiverComponent);
remoteControlClientCompat = new RemoteControlClientCompat(
PendingIntent.getBroadcast(
getApplicationContext(),
0,
mediaButtonIntent,
PendingIntent.FLAG_UPDATE_CURRENT
)
);
RemoteControlHelper.registerRemoteControlClient(audioManager, remoteControlClientCompat);
}
final int flags = RemoteControlClient.FLAG_KEY_MEDIA_STOP;
remoteControlClientCompat.setTransportControlFlags(flags);
Run Code Online (Sandbox Code Playgroud)
remoteControlClientCompat它只是样本中RemoteControlClientCompat的一个实例.
然后在流媒体中我正在更新元数据.一切正常,甚至控件都发送到我的RemoteControlReceiver.数据和图像在锁定屏幕上很好地显示.
从我的应用程序停止流式传输会破坏锁定屏幕的东西但是当我试图从小部件本身(通过按下停止按钮)销毁它时,它正在做一些奇怪的事情.按停止按钮使广播接收器停止我的流媒体服务.然后在服务的onDestroy()方法中,我这样做:
RemoteControlHelper.unregisterRemoteControlClient(audioManager, remoteControlClientCompat);
audioManager.unregisterMediaButtonEventReceiver(mediaButtonReceiverComponent);
audioManager.abandonAudioFocus(this);
Run Code Online (Sandbox Code Playgroud)
一旦audioManager.unregisterMediaButtonEventReceiver(mediaButtonReceiverComponent);调用,小部件就会闪烁.我试过评论这条线,然后眨眼就发生了audioManager.abandonAudioFocus(this);.在服务停止时评论其他行也会使其闪烁.
我注意到当我从通知中停止流式传输时也会发生这种情况.
我究竟做错了什么?我试过改变这个调用的顺序,但我无法解决它.我注意到Spotify在几个版本之前有完全相同的问题.我想知道他们是如何解决的......
有没有办法在android中启动“teamviewer”应用程序(或其他类似的应用程序,让您远程控制手机)指定控制设备所需的“用户ID”和密码?
例如:
Intent i = getPackageManager().getLaunchIntentForPackage("com.teamviewer");
i.putExtra("id_key", "123456789");
i.putExtra("password", "1234");
startActivity(i);
Run Code Online (Sandbox Code Playgroud)
谢谢
我正在制作一个处理音乐播放和暂停的iPhone音乐应用程序并维护自己的播放列表.此应用程序不提供next/prev歌曲功能,因此我不希望这些按钮显示在iOS的控制中心(向上滑动屏幕)上.
我尝试了以下代码,使它们从那里消失:
MPRemoteCommandCenter *commandCenter = [MPRemoteCommandCenter sharedCommandCenter];
// Do not allow next/prev song command on remote control since this is not supported in app either
commandCenter.nextTrackCommand.enabled = NO;
commandCenter.previousTrackCommand.enabled = NO;
[commandCenter.nextTrackCommand addTarget:self action: @selector(emptyFunction)];
[commandCenter.previousTrackCommand addTarget:self action: @selector(emptyFunction)];
Run Code Online (Sandbox Code Playgroud)
这不起作用:应用程序的音乐是否正在播放,这两个按钮仍然显示在上滑屏幕中,并且它们不会显示为灰色,并且它们确实起作用(虽然不正确,但这是无关的).
我应该如何让它们消失?
iphone remote-control audio-player mpmusicplayercontroller ios
我的任务是为 android mobile 创建一个应用程序来控制 Android TV,最好是任何应用程序之外的仪表板/登陆页面(包括设置)。是通过蓝牙还是 wifi 并不重要,尽管我发现蓝牙是不可能的,因为需要 HID 配置文件,并且该配置文件仅在 API 28 上可用(我需要从 API 19 开始支持)
Play 商店中有一些应用程序已经具有此功能。大多数通过 Wifi 连接到 Android TV,也与它配对。
通过分析 APK 文件,我发现了一些选项,即
有些使用 connectSDK库
其他人使用的似乎是我似乎找不到的本地 google 包
import com.google.android.tv.support.remote.Discovery;
import com.google.android.tv.support.remote.core.Client;
import com.google.android.tv.remote.BuildInfo;
Run Code Online (Sandbox Code Playgroud)我发现几年前也可以使用 Anymote 协议,但该协议仅适用于 Google TV,不适用于 Android TV。
我现在面临的问题是connectSDK库没有得到维护并且不包含任何用于 Android TV 连接的代码。本地 google 包在任何地方都找不到,不确定它是否包含在特定的 Jar 文件中,或者可能是一些模糊/隐藏的依赖项?
我可以尝试使用 Android TV 创建到特定套接字的连接,例如,我知道ServiceTypeis"_androidtvremote._tcp."并且端口号是6466。但我不确定实现这一点的最佳方法是什么。
我正在寻找的是我如何解决这个问题的一些指示或想法。也许也有一些参考。
如何从命令行控制正在运行的Google Chrome实例?我希望有一个像-remote旗子的东西,允许我发送一些JavaScript或某些东西.特别是,我想在最前面的窗口重新加载最顶层的文档.
我对Linux/MacOS解决方案特别感兴趣.
remote-control ×10
android ×4
ios ×3
java ×2
audio-player ×1
background ×1
eclipse ×1
eclipse-cdt ×1
ios4 ×1
iphone ×1
ipod ×1
linux ×1
microphone ×1
objective-c ×1