我想知道为什么Android无法加载我的活动。
我在MainActivity
内的RecyclerView中设置了启动另一个活动(Activity2
)的意图。目前,在打开应用程序并单击这些项目时,这没有问题。
我有一个小部件,它也已设置为打开Activity2
。这样做正确无误,对后向导航没有任何问题,除非关闭了应用程序。在这种情况下,小部件只是关闭了应用程序,而不是从Activity2
到MainActivity
的返回按钮。
清单将两个活动都声明为“ SingleTop”。
为了解决此问题,我将代码添加到onBackPressed()
方法中,并捆绑了其他代码,以了解窗口小部件或主体是否已启动Activity2
。现在,如果小部件从空/已关闭的应用启动了MainActivity
,则代码将开始Activity2
的意图,但是在这种情况下,项目的onClicks不再能够启动Activity2
。
TLDR:始于MainActivity
的意图将意图启动中断回到始于MainActivity
的活动。
这是我的代码,如果小部件从无效活动开始,该代码将结束第二个活动。
if(mDidWidgetStart && isTaskRoot()) {
Log.d(TAG, "isTaskRoot and widget started");
Intent mainActIntent = new Intent(MediaPlayerActivity.this, MainMediaActivity.class);
startActivity(mainActIntent);
finish();
}
在我的清单中,两个活动都用android:launchMode:"singleTop"
声明。
在RV项目中调用我的onclick,如下所示:
if(...) {
ActivityOptionsCompat options = ActivityOptionsCompat.
makeSceneTransitionAnimation((Activity) v.getContext(),
holder.thumbnailView,
holder.thumbnailView.getTransitionName());
VideoParcelable ytVideo = (VideoParcelable)
Toast.makeText(mContext, "Intent launched",
Toast.LENGTH_SHORT).show();
Intent myIntent= new Intent(mContext,
MediaPlayerActivity.class);
myIntent.putExtra("video_object", video);
MyIntent.putExtras(options.toBundle());
mContext.startActivity(MyIntent);
//logging to determine values are present
Log.v(TAG, "mContext = " + mContext);
Log.v(TAG, "v.getContext() = " + v.getContext());
Log.v(TAG, "myIntent: " + myIntent);
}
我知道上面的代码的if语句和mContext是正确的,因为单击该项目时会出现Toast
消息,但是该意图从未开始。单击失败的日志返回非空值。
评论中要求的添加的小部件更新代码
private static RemoteViews getDefaultWidgetViews(Context context) {
RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.video_widget);
Intent launchMainActivityIntent = new Intent(context, MainMediaActivity.class);
//set pending intent
PendingIntent appPendingIntent = PendingIntent.getActivity(context, 0, launchMainActivityIntent, PendingIntent.FLAG_UPDATE_CURRENT);
//sets actual click action on the widget layout view
remoteViews.setOnClickPendingIntent(R.id.video_widget_layout, appPendingIntent);
//return created remote views
return remoteViews;
}
更新:在稍后放弃并重新启动项目后,此错误不再显示。我没有更改任何代码...这可能是由某种Gradle同步问题引起的吗?不可能是模拟器,因为在我的手机上也发生了同样的结果。
*请注意自我,屏幕快照并捕获诸如此类的未来怪异的每个细节。有人知道AS是否/在哪里保留以前会话的旧Logcat输出吗?还是总是清除它?