重复使用相同的活动

时间:2016-09-27 14:07:19

标签: java android android-intent android-service flags

想象一下这种堆栈情况: 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那就是那个条件!

1 个答案:

答案 0 :(得分:1)

问题是您在NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"name" withExtension:@"momd"]; 内呼叫getIntent()。来自onNewIntent()的文档:

  

返回开始此活动的意图。

因此,您将getIntent()提供给intent。要将onCreate()提供给intent,您只需使用方法签名中提供的onNewIntent()

intent