我正在尝试在Google Play视频应用中的操作栏中实现搜索界面(https://play.google.com/store/apps/details?id=com.google.android.videos).我认为它是SearchView小部件,但不明白如何进行相同的自定义:在其中添加按钮,设置背景,并扩展操作栏的整个宽度

我已经制作了android音频应用程序.现在有些用户报告说,当他们通过汽车蓝牙连接设备时,应用程序没有响应媒体按钮(播放,暂停,下一个).
与此同时,我用蓝牙扬声器测试了应用程序 - 播放/暂停按钮可以根据需要工作.
车内蓝牙音箱和蓝牙收音机有什么区别吗??? 这很奇怪
我正在使用ExoPlayer并使用此代码处理媒体按钮:
Intent mediaButtonIntent = new Intent(Intent.ACTION_MEDIA_BUTTON, null, getApplicationContext(), MediaButtonReceiver.class);
mSession.setMediaButtonReceiver(PendingIntent.getBroadcast(getApplicationContext(), 0, mediaButtonIntent, 0));
MediaSessionConnector mediaSessionConnector = new MediaSessionConnector(mSession, new DefaultPlaybackController(), false, null);
mediaSessionConnector.setQueueNavigator(new QueueNavigatorAdapter() {
@Override
public void onSkipToPrevious(Player player) {
playPrevious();
}
@Override
public void onSkipToNext(Player player) {
playNext();
}
});
mediaSessionConnector.setPlayer(mPlayer, null);
Run Code Online (Sandbox Code Playgroud)
和
mPlayer.prepare(source);
mSession.setActive(true);
mPlayer.setPlayWhenReady(true);
Run Code Online (Sandbox Code Playgroud)
我知道AudioManager.registerMediaButtonEventReceiver()和处理KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE等但我确信mSession.setMediaButtonReceiver && MediaSessionConnector为我做了.
也许我错了,这还不够?
minSdkVersion 21
如果我在项目和该项目的依赖项中有不同的 Kotlin 版本,我不知道会遇到什么问题。
选项1:
1.3.72okhttp例如)包括 Kotlin 1.4.10。(我们现在为 Authenticator、Interceptor 等使用 Kotlin 1.4.x 功能接口。)选项 2:
1.4.01.3.71在选项 2 中,我收到下一个警告:
w: 类路径中的运行时 JAR 文件应该具有相同的版本。这些文件位于类路径中: /.gradle/caches/transforms-2/files-2.1/ab41544fa06f7b55dec847efe3b9899c/jetified-kotlin-stdlib-jdk7-1.3.71.jar (version 1.3) .transforms-cache/s/文件-2.1 / a4c6c3b949eb40b555dea1468ae75f87 / jetified-科特林-STDLIB-1.4.10.jar(1.4版本).gradle /高速缓存/变换-2 /文件-2.1 / f98f62bf33e752598311020043618780 / jetified-科特林-STDLIB-共1.4.10.jar(版本 1.4)
w:类路径中的某些运行时 JAR 文件的版本不兼容。考虑从类路径中删除它们
我很难理解Android设备的电源管理最佳实践和睡眠模式状态.
睡眠模式.
1.1)什么时候会发生?
1.2)CPU将进入睡眠状态并且我的线程暂停?这会发生什么时候?
1.3)为防止CPU休眠,我可以使用PARTIAL_WAKE唤醒锁定或报警管理器吗?什么是最好的电池?
1.4)如何通过我的应用程序以编程方式阻止在睡眠模式下关闭WiFi和3G连接?
PS是的,我明白它对电池寿命有害!我试图找到最好的妥协......
我写了我的即时通讯应用程序.我需要持久连接到服务器.如何实现这一目标的最佳方式?在关闭屏幕约20-30分钟后,我失去了互联网连接,但Skype保持在线状态.他们是怎么做到的?
我知道C2DM框架.但它从服务器到应用程序是单向的.如何最好的方式来使用它?服务器必须知道客户端真正连接!
我使用许多运算符构建了很长的rxjava链(带有改装请求):doOnNext,doOnError,switchIfEmpty,onErrorResumeNext,flatMap在某些设备(例如Android 4.1)上,当链沿最长路线走时,它会引发StackOverflowError异常。
是否有一些方法或最佳实践来优化链或防止StackOverflowError?
现在,我只看到一种方法-断开链,并从第一个onComplete(OnNext)调用第二部分,但我认为这不是被动方式。
另一种方法-使用.subscribeOn(Schedulers.newThread());更改线程 操作员。似乎也不是最好的解决方案。
我的代码:1)订阅代码
fastSearch(keyphrase)
.onErrorResumeNext(throwable -> {
return correctKeyphraseAndSearch(keyphrase);
})
.doOnNext(resultsDao -> {...})
.subscribe(...)
Run Code Online (Sandbox Code Playgroud)
2)辅助方法
public static Observable<SearchResultsDao> fastSearch(final String keyphrase) {
String SRD = "true";
final HttpQueryParams params = new HttpQueryParams();
//read from cache chain
Observable<SearchResultsDao> cacheChain = getCache().fastSearch(keyphrase, SRD)
.doOnNext(...)
.doOnError(...)
.onErrorResumeNext(new HandleNoCacheEntry<SearchResultsDao>(params)); //save some data to "params", and return Observable.empty
//network request chain
Observable<SearchResultsDao> networkChain = getApi().fastSearch(keyphrase, SRD)
.retryWhen(new OnNewSessionRequired())
.doOnNext(new WriteToCacheAction<SearchResultsDao>(params)); //save to cache
//combine cache+network chains
return cacheChain
.switchIfEmpty(networkChain)
.doOnNext(resultsDao -> …Run Code Online (Sandbox Code Playgroud)