由于以下原因,Google一直拒绝我的应用:"在审核期间,我们发现如果在插入Android Auto体验时设备上播放音频,则音乐将继续通过汽车扬声器播放而无需用户意图.我们将此视为司机分心,并不适合Android Auto应用程序."
我认为我已经采取了相应的步骤来解决这个问题,请按照此处的文档进行操作:https://developer.android.com/training/auto/audio/index.html#isconnected
然而,出于同样的原因,他们再次拒绝了我.
在我的MediaBrowserServiceCompat StreamService类中,我添加了以下代码:
private IntentFilter androidAutoConnectionIntentFilter = new IntentFilter("com.google.android.gms.car.media.STATUS");
private AndroidAutoConnectionStatusReceiver androidAutoConnectionStatusReceiver = new AndroidAutoConnectionStatusReceiver();
Run Code Online (Sandbox Code Playgroud)
在onCreate()中,我添加了:
registerReceiver(androidAutoConnectionStatusReceiver, androidAutoConnectionIntentFilter);
Run Code Online (Sandbox Code Playgroud)
并将此类添加到服务中:
private class AndroidAutoConnectionStatusReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
System.out.println("*** ANDROID AUTO CONNECTED: " + intent);
String status = intent.getStringExtra("media_connection_status");
boolean isConnectedToCar = "media_connected".equals(status);
if (isConnectedToCar) {
// android auto connected so stop playback
Intent stopIntent = new Intent(context, StreamService.class);
stopIntent.setAction(StreamService.ACTION_PLAYER_STOP);
context.startService(stopIntent);
}
}
}
Run Code Online (Sandbox Code Playgroud)
知道我如何更新我的应用程序以解决这种拒绝?
我正在使用媒体播放器回调方法为 Android Auto 实现语音命令。我无法让 Auto 识别出我要求在我的应用程序上播放标题:“Play [x] on MyApp”。我知道这个命令发布后需要几天时间才能工作,但我仍然可以说“Play [x]”媒体会话已经在运行,它应该使用onPrepareFromSearch和onPlayFromSearch方法来搜索和播放内容。
当我说“Play [x] on MyApp”我得到回应时“I looked for [x] on MyApp on Google Play Music but it either isn’t available or it can’t be played right now”。当我说“Play [x]”我的媒体服务正在运行时,它通常会将我重定向到 Google Play 音乐。
我可以使用语音命令暂停、恢复、向前跳和向后跳,我看到那些被记录但当我尝试执行语音搜索时既不调用onPrepareFromSearch也不onPlayFromSearch调用。
我尝试过的事情:
<intent-filter>为MEDIA_PLAY_FROM_SEARCH我的应用程序中的活动添加了一个for以标记我的应用程序可用于搜索媒体 onPrepareFromSearch并onPlayFromSearch在我的MediaSessionCompat.CallbackACTION_PLAY_FROM_SEARCH并ACTION_PREPARE_FROM_SEARCH作为支持的操作。 FLAG_HANDLES_MEDIA_BUTTONS和FLAG_HANDLES_TRANSPORT_CONTROLS我正试图通过Android Auto显示通知.通知确实显示在我的手机上.但是,它没有在Android Auto模拟器上显示.这是一个媒体应用程序.
automotvie_app_desc.xml:
<automotiveApp>
<uses name="media"/>
</automotiveApp>
Run Code Online (Sandbox Code Playgroud)
这段代码在我的MediaBrowserService班上:
private Notification postNotification(AutoNotificationHelper.Type type) {
Log.d(TAG, "Post Notification");
Notification notification = AutoNotificationHelper.createMenuErrorNotification(
getApplicationContext(), type, mSession);
if (notification != null) {
mNotificationManager.notify(TAG, NOTIFICATION_ID, notification);
}
return notification;
}
Run Code Online (Sandbox Code Playgroud)
这是创建通知的位置:
static Notification createMenuErrorNotification(Context context, Type type,
MediaSessionCompat mediaSession) {
MediaControllerCompat controller = mediaSession.getController();
MediaMetadataCompat mMetadata = controller.getMetadata();
PlaybackStateCompat mPlaybackState = controller.getPlaybackState();
if (mMetadata == null) {
Log.e(TAG, "MetaData is null");
}
if (mPlaybackState == null) {
Log.e(TAG, …Run Code Online (Sandbox Code Playgroud) 我有一个Android Auto应用程序.我想利用分页在应用程序内浏览.您似乎可以通过获取对MediaBrowserCompat的引用并在.subscribe()中传递这些常量来设置EXTRA_PAGE和EXTRA_PAGE_SIZE.但是,我无法弄清楚如何获取Android Auto Audio用于调用.subscribe()的MediaBrowserCompat的引用.
对于一些应该简单的事情来说,这似乎太复杂了,我只是在思考这些事情吗?
pagination android-auto mediabrowserservice mediabrowserservicecompat mediabrowser
从源代码构建Android Automotive之后,我该怎么做
我正在尝试从源代码构建Android Automotive.我可以使用以下命令成功构建它:
$ repo init -u https://android.googlesource.com/platform/manifest -b android-8.0.0_r11
$ source build/envsetup.sh
$ lunch car_emu_x86_64-userdebug
$ make -j8 V=1 &>> make.log
我的问题是如何运行模拟器?在谷歌搜索并浏览一些stackoverflow帖子后,我遇到了这个:
首先,我在命令行中设置一个env变量(模拟器使用它来确定要启动的模拟器)
export ANDROID_PRODUCT_OUT=/path/to/build_root
接下来,我创建了一个文件car-emulator.sh并将其放入其中(构建在Ubuntu机器上完成)
#!/usr/bin/env bash
ANDROID_BUILD_OUT=/path/to/build_root/out
PREBUILT=/path/to/build_root/prebuilts
EMULATOR_OUT=${ANDROID_BUILD_OUT}/target/product/car-x86_64
${PREBUILT}/android-emulator/linux-x86_64/emulator \
-sysdir ${EMULATOR_OUT} \
-system ${EMULATOR_OUT}/system.img \
-ramdisk ${EMULATOR_OUT}/ramdisk.img \
-data ${EMULATOR_OUT}/userdata.img \
-kernel ${PREBUILT}/qemu-kernel/x86_64/kernel-qemu \
-scale 0.7 \
-memory 512 \
-partition-size 1024
Run Code Online (Sandbox Code Playgroud)
我还尝试将相关的(darwin-x86_64)文件从构建机器下载到我的Mac笔记本电脑并尝试在那里运行.模拟器启动但立即崩溃,带有巨大的本机堆栈跟踪.
我的问题的下一部分是如何在设备上安装此图像?我看到CarService.apk已生成.在设备上安装此APK是否足够?或者CarService和相关软件包是否应该成为需要完整闪存的系统映像的一部分?
我正在尝试连接到桌面主机 (DHU) 以进行 Android Auto 测试,并在启动时一直出现黑屏。当我单击并右键单击它时,我可以看到红色和绿色的触摸人工制品。
我已按照此处的所有说明进行操作:https : //developer.android.com/training/cars/testing。
我没有收到控制台错误,并且我确保 Android Auto 应用程序启用了开发人员模式并且主机服务器正在运行。我也尝试过不同的 tcp 端口。
我在 Pixel 3 上使用装有 Android 10 的 Mac 进行连接的电话部分,所有内容都有最新更新。我还尝试了另一个带有 Marshmallow 6.0.1 的物理设备。手机上的 Android Auto 应用程序版本为 5.5.602944-release。
这是我第一次使用 DHU,我尝试清除缓存并重置手机上 Android Auto 应用程序上的所有内容。
当我打开 Android Auto 应用程序并从终端启动 DHU 时,我确实注意到手机上的 Android Auto 应用程序关闭(我认为这不应该发生 - 但我可能错了)。
我在 Playstore 上有一个音频播放器应用程序,想添加对 AndroidAuto 的支持。进行必要的更改后,当我将新的 apk 上传到 Playstore 时,它被拒绝并收到了以下来自 Play 的电子邮件
当他们说应用程序没有出现在屏幕上时,这是什么意思?我在清单中有所有必需的条目,使我的服务可以浏览。我不明白缺少什么。
我能够在真正的 android 设备上测试该应用程序,并且它可以正常运行。
---------- 来自 google play 的电子邮件 ----------
应用状态:您的应用尚未被 Android Auto 接受,并且更新未在 Google Play 上发布。
APK 版本的资格问题: 当我们尝试测试功能时,该应用没有出现在自动屏幕中。
考虑用于 Android Auto:
或者,如果您想从 Android Auto 中排除您的应用:
有关应用如何符合 Android Auto 资格的更多详细信息,您可以查看 Android Auto 应用质量指南。
如果您认为我们做出的此决定有误,请向我们的团队提交其他信息,我们将再次审核您的应用。
感谢您支持 Google Play,
Google Play 团队
android google-play android-auto mediabrowserservice android-automotive
是否有可能在Android自动应用程序中读取车辆信息,如速度,行驶距离,燃料详情?
我已经检查了https://developer.android.com/training/auto
他们没有提及任何相关内容.Android auto是否有任何接口/ API来获取车辆相关信息.
我有一个项目,我正在尝试添加Android Auto支持.我已将以下代码添加到我的清单中,如Auto文档中所示:
<application
....
<meta-data android:name="com.google.android.gms.car.application"
android:resource="@xml/automotive_app_desc"/>
....
<service
android:name="com.me.auto.MyMediaBrowserService"
android:exported="false">
<intent-filter>
<action android:name="android.media.browse.MediaBrowserService" />
</intent-filter>
</service>
....
</applicaiton>
Run Code Online (Sandbox Code Playgroud)
我也在使用我的gradle.build文件中定义的不同构建风格:
defaultConfig {
applicationId "com.me"
minSdkVersion 16
//noinspection OldTargetApi
targetSdkVersion 22
versionCode 1
versionName "1.0"
}
productFlavors {
regular {
applicationId "com.me"
}
different {
applicationId "com.meother"
}
}
Run Code Online (Sandbox Code Playgroud)
当我使用'常规'风格构建和安装时,android auto不起作用.但是,当我使用"不同"的味道构建和安装时,一切都很好.如果我然后将常规更改为applicaitonId'com.menew'之类的其他内容,那么Auto再次运行良好.
applicationId构建风格如何制作或破坏Android Auto功能?
我有一个具有自动功能的 Android 应用程序已被商店拒绝,因为:
“您的应用不支持所有必需的语音命令。例如,您的应用不包含用于操作“android.media.action.MEDIA_PLAY_FROM_SEARCH”的 Intent 过滤器。”
所以我希望至少让应用程序响应“在 X 应用程序上播放音乐”,但通过查看文档我无法让它工作。我将此添加到我的主要活动中(这不是启动器活动,它通过活页夹控制服务)
<intent-filter>
<action android:name="android.media.action.MEDIA_PLAY_FROM_SEARCH" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
Run Code Online (Sandbox Code Playgroud)
触发 aMediaBrowserServiceCompat以这种方式初始化:清单:
<service
android:name=".Services.RadioService"
android:enabled="true"
android:exported="true">
<intent-filter>
<action android:name="android.media.browse.MediaBrowserService" />
</intent-filter>
</service>
Run Code Online (Sandbox Code Playgroud)
部分代码:
@Override
public void onCreate() {
super.onCreate();
audioManager = (AudioManager) getApplicationContext().getSystemService(Context.AUDIO_SERVICE);
mSession = new MediaSessionCompat(this, "RService");
mSession.setFlags(MediaSessionCompat.FLAG_HANDLES_MEDIA_BUTTONS | MediaSessionCompat.FLAG_HANDLES_TRANSPORT_CONTROLS
| MediaSessionCompat.FLAG_HANDLES_QUEUE_COMMANDS);
mSession.setCallback(mCallback);
mSessionConnector = new MediaSessionConnector(mSession);
setSessionToken(mSession.getSessionToken());
setMediaBrowser();
initializeReceiver();
C_F_App.createNotificationChannelPlayer(getApplicationContext());
rNController = new RadioNotificationController(this, mSession, getApplicationContext());
}
final MediaSessionCompat.Callback mCallback =
new MediaSessionCompat.Callback() {
@Override
public void onPlayFromMediaId(String mediaId, …Run Code Online (Sandbox Code Playgroud)