我的应用使用Youtube Android SDK提供youtube视图.没有问题显示视频但在打开youtube应用程序时崩溃与DeadObjectException.
我的代码如下
//init
FragmentTransaction fragmentTransaction = fm.beginTransaction();
YouTubePlayerSupportFragment fragment = new YouTubePlayerSupportFragment();
fragmentTransaction.replace(R.id.fragmentz, fragment);
fragmentTransaction.commit();
fragment.initialize(Constants.YOUTUBE_DEV_KEY, this);
@Override
public void onInitializationSuccess(YouTubePlayer.Provider provider, final YouTubePlayer youTubePlayer, boolean wasRestored) {
if (!wasRestored) {
this.youTubePlayer = youTubePlayer;
this.youTubePlayer.setShowFullscreenButton(true);
try {
this.youTubePlayer.loadVideo(youtubeLink);
//other stuff
} catch (IllegalStateException e) {
Logger.e(e);
}
}
}
Run Code Online (Sandbox Code Playgroud)
当1)直接通过意图移动到youtube应用程序或2)通过播放器视图上的youtube图标移动到youtube应用程序时崩溃
崩溃日志如下所示
java.lang.IllegalStateException: android.os.DeadObjectException
at com.google.android.youtube.api.jar.client.RemoteEmbeddedPlayer.u(SourceFile:506)
at com.google.android.apps.youtube.api.jar.a.a.t(SourceFile:467)
at com.google.android.youtube.player.internal.h.onTransact(SourceFile:392)
at android.os.Binder.transact(Binder.java:361)
at com.google.android.youtube.player.internal.d$a$a.r(Unknown Source)
at com.google.android.youtube.player.internal.s.h(Unknown Source)
at com.google.android.youtube.player.YouTubePlayerView.e(Unknown Source)
at com.google.android.youtube.player.YouTubePlayerSupportFragment.onSaveInstanceState(Unknown Source)
at android.support.v4.app.Fragment.performSaveInstanceState(Fragment.java:1647)
at android.support.v4.app.FragmentManagerImpl.saveFragmentBasicState(FragmentManager.java:1610)
at …Run Code Online (Sandbox Code Playgroud) 我的应用有如下所示的活动堆栈
和清单是这样的
<activity A>
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity B android:launchMode="singleTask"/>
<activity C/>
Run Code Online (Sandbox Code Playgroud)
当我从启动器启动应用程序时,它充当A - > B - > C.在活动C按主页按钮并从最近的应用程序列表中调出(长按Home),显示C. 还行吧.
但是当我从Notification启动app时,因为我不想显示加载屏幕,所以启动活动B.因此,用户可以导航B - > C.
但是当用户在活动C按Home并从最近的应用列表中选择应用时,B将重新启动并且不会保留状态.所以C活动总是消失.
我尝试了很多标志选项,但我找不到解决方案.我想要的是,该应用程序的行为就像用户从启动器启动应用程序一样.
我创建了这样的通知的待处理意图.在我的应用程序中,我应该Intent.FLAG_ACTIVITY_CLEAR_TOP用于活动B.
Notification notice = new Notification(R.drawable.icon_notification, context.getString(R.string.app_name), System.currentTimeMillis());
Intent intent = new Intent(context, B.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK|Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.putExtras(i);
PendingIntent contentIntent = PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
Run Code Online (Sandbox Code Playgroud)
我认为最近的应用程序列表通过通知发送相同的意图,因此始终调用活动B. 但是当我从启动器启动应用程序时,它只是将我发送到最后一个活动C,而不是B.
请帮助我.:(
我已经解决了这个问题,如下所示.
if ((getIntent().getFlags() & Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY) != 0 ) {
i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET | Intent.FLAG_ACTIVITY_NEW_TASK); …Run Code Online (Sandbox Code Playgroud) 我想删除ActionBar之前的短分隔符,MenuItem其中包含"withText"选项.
我尝试了许多不同的主题设置,但失败了.
有没有解决方案可以删除它?
这是我的主题xml.
<style name="my_actionbar" parent="@style/Widget.Sherlock.Light.ActionBar.Solid">
<item name="android:background">@drawable/actionbar_bg</item>
<item name="background">@drawable/actionbar_bg</item>
<item name="android:actionBarDivider">@null</item>
<item name="actionBarDivider">@null</item>
<item name="android:showDividers">none</item>
<item name="android:dividerVertical">@null</item>
<item name="android:dividerPadding">0dp</item>
<item name="android:divider">@null</item>
</style>
Run Code Online (Sandbox Code Playgroud) 在之前的android SDK中,我通过调用询问了新的权限,Facebook.authorize()并显示了批准权限屏幕.但是在SDK 3.0中,当我调用时FacebookActivity.openSessionForPublish(),对话框总是显示登录表单.如何显示批准权限屏幕?
我已经设置了具有令牌和到期日期的会话,其SessionState是CREATED_TOKEN_LOADED.
是否要求显示权限对话框或Facebook.authorize()始终显示登录表单?那么请教我正确的方法.
我的代码如下
public class FbConn extends FacebookActivity {
public void onCreate(Bundle savedInstanceState) {
...
if( savedInstanceState == null ) {
Session savedSession = CommonUtil.getFbSession(CustomSessionStore.getFbInfo(getApplicationContext())); //get access token and expiration date from session store and set up new session.
Session.setActiveSession(savedSession);
setSession(savedSession);
}
}
protected void onStart() {
super.onStart();
openSessionForPublish(EpisodeApplication.config.getSelectedServer().fbAppId, Constants.FB_PERMISSIONS);
}
}
Run Code Online (Sandbox Code Playgroud)
更新
我已经注释掉了这些行,并且权限请求屏幕显示成功.但我不确定这是否正确.
在com.facebook.LoginActivity第62行,
Utility.clearFacebookCookies(this);
Run Code Online (Sandbox Code Playgroud)
在com.facebook.Session第1202行,
Utility.clearFacebookCookies(getStaticContext());
Run Code Online (Sandbox Code Playgroud)