想象一下这种堆栈情况: A - B-C - D - B,A,B和C是活动,但D是服务。
基本上,我有一项服务(D),我希望从该服务中调用已存在的活动(B)。
我知道如果我想重新使用一个活动,我所要做的就是使用标志(或更改清单)SingleTop(如果它已经在顶部将重新使用该活动)或SingleTask(将重新使用活动,无论它是否在最佳状态。)
问题在于,由于我在服务中,我将不得不添加标志FLAG_ACTIVITY_NEW_TASK,以便我可以调用一个活动。此外,我在我的清单中添加了SingleTask作为启动模式,以便重新使用该活动。
这很好用,因为它重新使用相同的活动并返回onNewIntent(Intent intent)方法。 问题是我在该意图上作为额外内容的所有内容都是空的。我尝试通过该意图发送2个字符串和2个布尔值,并且所有这些都将onNewIntent(Intent intent)作为null。
我该如何解决这个问题?在获取附加内容之前,我是否必须在onNewIntent(Intent intent)方法中执行某些操作?还有更好的选择吗?
PS: 我听说过StartActivityForResult或类似的东西。这只会有50%的时间,因为这是一个"聊天状"应用
所以我将进入"聊天",从那里我去另一个活动,在那里我可以选择要发送的东西。之后,我将转到完成转移的服务,然后回到"聊天"。 但是当我收到某些内容时,我已经在聊天了#14;所以startActivityForResult在这种情况下不起作用(接收的服务将在后台运行+我不会不想完成接收部分,因为我想一直在听某事。)
以下是我尝试重新启动单个活动的服务代码:
Intent transfRec=new Intent(ServerComm.this ,TransferRecordActivity.class);
transfRec.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
transfRec.putExtra("receivedFilePath",appName+".apk");
transfRec.putExtra("joinMode","appselection");
transfRec.putExtra("nameOfTheApp",appName);
transfRec.putExtra("received",false);
transfRec.putExtra("isHotspot",isHotspot);
startActivity(transfRec);
这是我的onNewIntent(意图意图)的代码:
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
System.out.println("I am here in the new intent");
if(intent==null){
System.out.println("Intent is null inside the new intent method !!!");
}
tmpFilePath=getIntent().getStringExtra("receivedFilePath");
System.out.println("The tmpFilePath is : "+tmpFilePath);
received=getIntent().getBooleanExtra("received",true);
nameOfTheApp=getIntent().getStringExtra("nameOfTheApp");
isHotspot=getIntent().getStringExtra("isHotspot");
System.out.println("O received boolean esta a : : : "+received);
textView.setVisibility(View.GONE);
receivedFilePath= Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS) + "/"+tmpFilePath;
System.out.println("transfer REcord Activity _: the received file path is :::: " +receivedFilePath);
getReceivedApps();
adapter= new HighwayTransferRecordCustomAdapter(this,listOfItems);
receivedAppListView.setAdapter(adapter);
编辑:你们可以看到我检查意图是否为空,但事实并非如此,因为它没有做system.out.println那就是那个条件!
答案 0 :(得分:1)
问题是您在NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"name" withExtension:@"momd"];
内呼叫getIntent()
。来自onNewIntent()
的文档:
返回开始此活动的意图。
因此,您将getIntent()
提供给intent
。要将onCreate()
提供给intent
,您只需使用方法签名中提供的onNewIntent()
:
intent