- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个包含 YouTubePlayerSupportFragment 的 fragment .此 fragment 位于 ViewPager 内。
播放器在我的 Galaxy S3 Android 手机 (4.3/API 18) 和我的虚拟机 (4.3/API 18) 上运行良好。但是在我尝试过的所有其他手机上,播放器都会显示 初始化 YouTube 播放器时发生错误
消息并抛出 onInitializationFailure有一个 UNKNOWN_ERROR
原因。
我已经检查了 LogCat,我的应用程序或 youtube 绝对没有其他错误/警告。
它不适用于以下设备:
我完全不知道为什么它对某些人有效而对其他人却无效。
fragment 代码如下:
public class RoomFragmentVideo extends PlugFragment implements
YouTubePlayer.OnInitializedListener, YouTubePlayer.PlayerStateChangeListener {
private static String CLASS_DBG_NAME = "RoomFragmentVideo";
private static final int RECOVERY_DIALOG_REQUEST = 1;
private YouTubePlayerSupportFragment youTubePlayer ;
private int playerInitialized;
private YouTubePlayer player;
static PlugFragment init(Bundle args) {
RoomFragmentVideo roomFrag = new RoomFragmentVideo();
// Supply val input as an argument.
roomFrag.setArguments(args);
Log.d(Constants.APP_DBG_LOG + CLASS_DBG_NAME + " - ","Created with args Room: " + ((String)args.get(RoomFragmentChat.ARG_ROOM)));
return roomFrag;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
thisActivity = (AppCompatActivity) this.getActivity();
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootview = inflater.inflate(R.layout.fragment_roomvideo, container,false);
youTubePlayer = YouTubePlayerSupportFragment.newInstance();
FragmentTransaction transaction = getChildFragmentManager().beginTransaction();
transaction.add(R.id.youtube_fragment, youTubePlayer).commit();
youTubePlayer.initialize(YouTubeDeveloperKey.DEVELOPER_KEY, this);
return rootview;
}
protected YouTubePlayer.Provider getYouTubePlayerProvider() {
return youTubePlayer;
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == RECOVERY_DIALOG_REQUEST) {
getYouTubePlayerProvider().initialize(YouTubeDeveloperKey.DEVELOPER_KEY, this);
}
}
@Override
public void onInitializationFailure(YouTubePlayer.Provider provider,
YouTubeInitializationResult errorReason) {
if (errorReason.isUserRecoverableError()) {
errorReason.getErrorDialog(this.getActivity(), 1).show();
Log.e(Constants.APP_DBG_LOG + CLASS_DBG_NAME + " - YouTube" ,"[Recoverable] Reason : " + errorReason.toString());
}
else {
//String errorMessage = String.format(getString(R.string.error_player), errorReason.toString());
String errorMessage = "Video couldnt load";
Toast.makeText(this.getActivity(), errorMessage, Toast.LENGTH_LONG).show();
Log.e(Constants.APP_DBG_LOG + CLASS_DBG_NAME + " - YouTube" ,"[Unrecoverable] Reason : " + errorReason.toString() + " Message: " + errorMessage);
playerInitialized = -1;
}
}
@Override
public void onInitializationSuccess(YouTubePlayer.Provider provider, YouTubePlayer player,
boolean wasRestored) {
this.player = player;
player.setPlayerStyle(PlayerStyle.CHROMELESS);
player.loadVideo(this.videoID);
playerInitialized = 1;
}
@Override
public void onPause(){
super.onPause();
Log.v(Constants.APP_DBG_LOG + CLASS_DBG_NAME + " - " , "onPause");
}
@Override
public void onResume(){
super.onResume();
Log.v(Constants.APP_DBG_LOG + CLASS_DBG_NAME + " - " , "onResume");
}
@Override
public void onStop(){
super.onStop();
player = null;
playerInitialized = -2;
Log.v(Constants.APP_DBG_LOG + CLASS_DBG_NAME + " - " , "onStop");
}
@Override
public void setUserVisibleHint (boolean isVisibleToUser){
super.setUserVisibleHint(isVisibleToUser);
if(isVisibleToUser){
this.resume();
}
Log.v(Constants.APP_DBG_LOG + CLASS_DBG_NAME + " - " , "setUserVisibleHint, status: " + isVisibleToUser);
}
@Override
public void onAdStarted() {
return;
}
@Override
public void onError(ErrorReason arg0) {
Log.e(Constants.APP_DBG_LOG + CLASS_DBG_NAME + " - " +"YoutubePlayer", arg0.name());
Toast.makeText(thisActivity, "YoutubePlayer error: " + arg0.name(), Toast.LENGTH_SHORT).show();
}
@Override
public void onLoaded(String arg0) {
return;
}
@Override
public void onLoading() {
return;
}
@Override
public void onVideoEnded() {
return;
}
@Override
public void onVideoStarted() {
return;
}
}
这是 XML:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<FrameLayout
android:id="@+id/youtube_fragment"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:visibility="visible" />
</LinearLayout>
我做错了什么?
非常感谢!
最佳答案
问题实际上是proguard。这是我添加到 proguard-project.txt
文件中的内容:
# keep youtube / google
-keep class com.google.api.services.** { *; }
-keep class com.google.android.youtube.player.** { *; }
# Needed by google-api-client to keep generic types and @Key annotations accessed via reflection
-keepclassmembers class * {
@com.google.api.client.util.Key <fields>;
}
关于安卓 YouTube API “An error occurred while initializing YouTube player”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30428535/
谁能用一个例子来解释 BooleanQuery 中 lucene 中的 BooleanClause.Occur.Must 和 BooleanClause.Occur.SHOULD 之间的区别? 最佳答
正如标题所说,multiset 在所有相同值的范围末尾插入一个值。 (例如:在多重集 1,2,2,3 中插入 2 使其成为 1,2,2,/*new*/2,3)。 如何在所有相同值范围的开头插入新值?
所以这是与此(Inserting in a multiset: before the first occurence of that value instead of after the last o
我试图从我的 WCF .Net Framework 4.5 向 API rest 发布一个文件。这是我的代码: public string CreateConclusion(string[] inst
我的 SQL 查询获取固件的错误修复验证列表,例如def-456 是一张票,要求我对产品进行固件测试。 def-456 有几个记录结果的子任务。结果记录为:id:abc-123、abc-124、abc
我想删除文件中多次出现的行,但想保留某些行。我该怎么做? 这是我的文件的一部分,我想更改它: §M: 1, K: 2 name, time, cycle, instr, L1-mi
我正在 SSMS 中测试 SQL 2016 Live Query Stats,每次尝试时都会收到错误消息“执行批处理时出错。错误消息是:发生一个或多个错误。”并且不返回任何结果集。一位同事试过了,对他
我们在 JBoss 4.2 上设置了一个水平集群。在我们将缓存模式从 REPL_ASYNC 更改为 REPL_SYNC 以解决问题之前, session 复制工作正常。我们开始看到一些 session
我正在尝试将 MVC 网站发布为 Azure 网络角色。 当我在本地运行它时,一切正常。 但是当我将其发布到 Azure 并浏览某些 MVC 操作时,我收到此错误: Server Error in '
假设一个静态库 libfoo 依赖于另一个静态库 libbar 的某些功能。这些和我的应用程序都是用 D 编写的。如果我的应用程序只直接使用 libfoo,并且只调用 libfoo 中的函数而不引用
我正在尝试在 Eclipse Helios 上安装 SVN 客户端, 我已经从 Collaboration 节点安装了所有 SVN 模块(更新中), 现在重启后我可以选择一个连接器 出现“颠覆性连接器
我在 cakephp 中有一些代码会产生错误。 这是 PHP Controller : $this->loadModel( 'Vote' ); //Newly added by amit start
我需要有关 Java 代码的帮助。 这就是问题所在: 输入示例:AaaaaAa 输出:A 出现 7。 问题是我需要它来忽略案例。 请帮助我,我的代码工作正常,只是它不忽略大小写。 import jav
我正在为 J2ME 开发一个应用程序,有时它完全卡住并且 AMS 需要相当长的时间来关闭它.在我看来,这像是一个死锁问题。 你能告诉我什么会导致死锁吗?例如,如果对象调用其自身的另一个同步方法,调用对
尝试将 DEXguard 安装到 Eclipse 中的简单应用程序时出现以下错误: Errors occurred during the build. Errors running builder '
在 SAS 中,假设我有一个名为“person_groups”的数据集。它有两个变量,名为“person”和“group”。该数据集只是将每个人分配到一个组。 我如何从这个数据集中删除所有在他们的组中
有人知道如何在表达式中找到第 n 次出现的字符串以及如何用正则表达式替换它吗? 例如我有以下字符串 txt sub("(^(.*?-){4}.*?)-(.*?-.*?)-", "\\1|\\3||"
是否有一个包允许我为同一个缓冲区设置多个 Occur 结果缓冲区(例如 grep-a-lot: http://www.emacswiki.org/emacs/grep-a-lot.el )。 我在分析
我一直在寻找这个,但似乎无法找到它。 我有一个带有 try {} catch {} 语句的脚本。如果没有发生错误,我想添加一个操作。 例如 try { something } catch { "Err
我正在从 iPhone 应用程序将照片上传到 Facebook。我已经让它工作了,只是有时它会返回“发生未知错误”。我不确定问题是什么。这种情况发生的概率约为 75%。 其他人也遇到过这种情况吗? 最
我是一名优秀的程序员,十分优秀!