【问题标题】:Retrieve calling Activity from Intent in Android从Android中的Intent中检索调用Activity
【发布时间】:2014-10-30 10:57:27
【问题描述】:

我试图在我的意图中传递我的活动指针,但我不知道如何检索它。

我有一个调用活动 (MyActivity),其代码如下:

Intent myServiceIntent = new Intent(this, myService.class);
startService(myServiceIntent);

在我的服务类中,我想检索调用活动。 像这样的:

private Activity CurrentActivity = null;    
public int onStartCommand(Intent intent, int flags, int startId) 
    {
        CurrentActivity = (CurrentActivity) intent.getClass();
        return super.onStartCommand(intent, flags, startId);
    }

这不起作用,但我也不知道是什么。 我也找不到将活动作为参数的 putExtra。 那么我该怎么做呢?

【问题讨论】:

  • 您不想在Intent 中发送Activity 引用。请说明您认为自己想要这样做的原因,我们可以提出替代方案。

标签: android android-intent android-activity android-service


【解决方案1】:

在第一个活动中取一个像这样的静态活动变量,

public static Activity activity;

在 onCreate 中执行此操作。

activity = this;

然后在第二个活动中这样做,

Activity activity = (your activity name).activity;

据我所知,这是最好的解决方案。只需像这样为变量传递一个代码/值。

Intent intent = new Intent();
intent.putExtra("someValue", "data");

在第二个活动中检查值,如果该值是您所需的值,则获取您所需的活动实例。我希望这能解决您的问题,如果可以,请告诉我。

【讨论】:

  • 抱歉回复晚了。我找到了另一种方法来实现我正在做的事情,所以我不需要这样做。但是,这似乎可行,唯一要添加的是在调用函数或更改变量时对具体 Activity 进行类型转换,在额外的意图中,我可以检查要使用的类型转换。非常感谢您的帮助!
  • 你不应该在静态变量中持有对 Activity 的引用。
【解决方案2】:

还可以获取调用activity的信息

val uriString= intent.toUri(Intent.URI_INTENT_SCHEME)

【讨论】:

    【解决方案3】:

    只需像这样在附加信息中发送活动名称

    startActivity(new Intent(this, otherActivity.class).putExtra("from" , "previousActivity"));
    

    并在当前活动中获得额外内容

    string act = getIntent().getStringExtra("from");
    
    Class callerClass = Class.forName(caller);
    

    希望它能解决你的问题。

    【讨论】:

    • 谢谢!虽然我不知道如何将类对象转换为 Activity 对象(不创建新实例)。
    • Activity obj = (Activity) callerClass .newInstance();
    • 这不可能。 OP 希望在 Intent 中发送 Activity 的实际实例。只是将活动类的名称放在 Intent 中以便接收者可以创建一个新实例是没有帮助的。此外,您不能(正确地)使用newClass.newInstance() 创建Android 组件的实例(如Activity)。这只会调用对象构造函数,但不会正确设置组件的上下文。只有 Android 框架可以创建 Android 组件的实例。
    • 这仍然不能完全解决我的问题。因为我不想创建我的 Activity 的新实例。我只是想将我现有 Activity 的某种引用传递给我的服务。
    猜你喜欢
    • 1970-01-01
    • 2017-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多