"No acceptable module found" 在 Android 模拟器上使用 com.google.android.gms play-services 9.2.0
"No acceptable module found" on Android emulators using com.google.android.gms play-services 9.2.0
我最近更新到 com.google.android.gms:play-services 9.2.0,我正在尝试使用新的 Chromecast 库和 Firebase Analytics,但在 Activity onCreate 方法位于 com.google.android.gms.cast.framework.CastContext.(未知来源)。如果这是由于 Cast 功能不适用于模拟器或者是版本问题,有什么想法吗?我正在测试的模拟器是 运行 5.0 和 5.1。
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
FirebaseAnalytics mFirebaseAnalytics = FirebaseAnalytics.getInstance(this);
setupCastListener();
mCastContext = CastContext.getSharedInstance(this);
mCastSession = mCastContext.getSessionManager().getCurrentCastSession();
mCastContext.getSessionManager().addSessionManagerListener(mSessionManagerListener, CastSession.class);
mFirebaseAnalytics = FirebaseAnalytics.getInstance(this);
}
谢谢
您的模拟器上的 Play Services 版本不支持 9.2.0。目前,我认为任何模拟器图像都不支持 9.2.0。您的选择是降级到 9.0.2,或者在真实设备上 运行,直到发布更新的模拟器映像。
如果仔细查看 logcat 输出,您应该会看到如下消息:
W/GooglePlayServicesUtil: Google Play services out of date. Requires 9256000 but found 9080030
您可以查看模拟器正在使用的 GPS 版本号,方法是转至 Settings/Apps,找到 Google Play 服务,然后点击它以获取应用信息。
您可以通过调用 GoogleApiAvalability.GOOGLE_PLAY_SERVICES_VERSION_CODE.
从代码中获取 GPS 版本号
包含一些模拟器版本的相关信息。
更新 Adrian Cretu 关于真实设备的问题
我的实验表明,真实设备上的 Cast 应用程序 运行ning 可以检测旧版本的 Play 服务并启动解析处理。我试验了 CastVideos 示例应用程序。我的解决方案可能不是最好的,但展示了这个概念。我创建了一个新的 activity 并在启动时 运行 并检查了 Play 服务的可用性。我更改了清单,使 activity 成为启动器 activity 而不是 VideoBrowserActivity
:
public class InitActivity extends AppCompatActivity {
private static final String TAG = "InitActivity";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
GoogleApiAvailability googAvail = GoogleApiAvailability.getInstance();
int status = googAvail.isGooglePlayServicesAvailable(this);
Log.i(TAG, "onCreate: Status= " + googAvail.getErrorString(status));
googAvail.makeGooglePlayServicesAvailable(this)
.addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
Log.i(TAG, "onComplete: Done");
if (task.isSuccessful()) {
Log.i(TAG, "onComplete: Starting VideoBrowser");
startActivity(new Intent(InitActivity.this, VideoBrowserActivity.class));
finish();
} else {
Log.e(TAG, "onComplete: RESOLUTION FAILED");
}
}
});
}
}
如果 Play 服务存在、最新且已启用,检查可用性的任务会立即完成并启动 VideoBrowserActivity
,原始启动 activity。否则,会出现一个对话框,告诉用户必须升级 Play 服务,在用户接受后,Play 商店会打开,用户可以开始下载最新版本。
我无法找到一种完全转换回 VideoBrowserActivity
的方法。我不得不重新启动应用程序。随着更多的工作,我认为从过时的 Play 服务中完全恢复是可能的。至少比应用程序崩溃更好。
此崩溃也会发生在未更新 GPS 的真实设备上。我正在使用 Google Cast SDK v3 和 GPS 9.2.0
我没有看到任何地方提到该设备实际上需要 GPS 9.2.0 才能让 Cast v3 工作。应用程序在启动时不崩溃的解决方法或至少是解决方案是什么?
当我更新 google play developer services app 时,我能够解决它。
我最近更新到 com.google.android.gms:play-services 9.2.0,我正在尝试使用新的 Chromecast 库和 Firebase Analytics,但在 Activity onCreate 方法位于 com.google.android.gms.cast.framework.CastContext.(未知来源)。如果这是由于 Cast 功能不适用于模拟器或者是版本问题,有什么想法吗?我正在测试的模拟器是 运行 5.0 和 5.1。
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
FirebaseAnalytics mFirebaseAnalytics = FirebaseAnalytics.getInstance(this);
setupCastListener();
mCastContext = CastContext.getSharedInstance(this);
mCastSession = mCastContext.getSessionManager().getCurrentCastSession();
mCastContext.getSessionManager().addSessionManagerListener(mSessionManagerListener, CastSession.class);
mFirebaseAnalytics = FirebaseAnalytics.getInstance(this);
}
谢谢
您的模拟器上的 Play Services 版本不支持 9.2.0。目前,我认为任何模拟器图像都不支持 9.2.0。您的选择是降级到 9.0.2,或者在真实设备上 运行,直到发布更新的模拟器映像。
如果仔细查看 logcat 输出,您应该会看到如下消息:
W/GooglePlayServicesUtil: Google Play services out of date. Requires 9256000 but found 9080030
您可以查看模拟器正在使用的 GPS 版本号,方法是转至 Settings/Apps,找到 Google Play 服务,然后点击它以获取应用信息。
您可以通过调用 GoogleApiAvalability.GOOGLE_PLAY_SERVICES_VERSION_CODE.
从代码中获取 GPS 版本号更新 Adrian Cretu 关于真实设备的问题
我的实验表明,真实设备上的 Cast 应用程序 运行ning 可以检测旧版本的 Play 服务并启动解析处理。我试验了 CastVideos 示例应用程序。我的解决方案可能不是最好的,但展示了这个概念。我创建了一个新的 activity 并在启动时 运行 并检查了 Play 服务的可用性。我更改了清单,使 activity 成为启动器 activity 而不是 VideoBrowserActivity
:
public class InitActivity extends AppCompatActivity {
private static final String TAG = "InitActivity";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
GoogleApiAvailability googAvail = GoogleApiAvailability.getInstance();
int status = googAvail.isGooglePlayServicesAvailable(this);
Log.i(TAG, "onCreate: Status= " + googAvail.getErrorString(status));
googAvail.makeGooglePlayServicesAvailable(this)
.addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
Log.i(TAG, "onComplete: Done");
if (task.isSuccessful()) {
Log.i(TAG, "onComplete: Starting VideoBrowser");
startActivity(new Intent(InitActivity.this, VideoBrowserActivity.class));
finish();
} else {
Log.e(TAG, "onComplete: RESOLUTION FAILED");
}
}
});
}
}
如果 Play 服务存在、最新且已启用,检查可用性的任务会立即完成并启动 VideoBrowserActivity
,原始启动 activity。否则,会出现一个对话框,告诉用户必须升级 Play 服务,在用户接受后,Play 商店会打开,用户可以开始下载最新版本。
我无法找到一种完全转换回 VideoBrowserActivity
的方法。我不得不重新启动应用程序。随着更多的工作,我认为从过时的 Play 服务中完全恢复是可能的。至少比应用程序崩溃更好。
此崩溃也会发生在未更新 GPS 的真实设备上。我正在使用 Google Cast SDK v3 和 GPS 9.2.0
我没有看到任何地方提到该设备实际上需要 GPS 9.2.0 才能让 Cast v3 工作。应用程序在启动时不崩溃的解决方法或至少是解决方案是什么?
当我更新 google play developer services app 时,我能够解决它。