【问题标题】:How to access MainActivity from broadcastReceiver callback如何从 broadcastReceiver 回调访问 MainActivity
【发布时间】:2015-08-21 02:07:37
【问题描述】:

我是 Android 开发的新手,并设法在 StackOverflow 上获得了这么远的阅读问题和答案。谢谢大家。

我想出了一个我无法解决的问题。我已经看到发布了类似的问题,但我并不清楚答案。请帮我解决这个问题。

我想从另一个类调用我的主要活动的方法。当我尝试调用该方法时应用程序崩溃。代码如下:

关于类文件:

public class AlarmReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        MainActivity MainActivity = new MainActivity();
        MainActivity.ligaInternet();
    }
}

在 mainactivity 文件上:

protected void ligaInternet() {
    ConnectivityManager connMgr = (ConnectivityManager)
          getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo networkInfo = connMgr.getActiveNetworkInfo();
    if (networkInfo != null && networkInfo.isConnected()) {
        String urlText="http://www.regiprof.com/regiprof_sms.php";
        String stringUrl = urlText.toString();
        new DownloadWebpageTask().execute(stringUrl);
    } 
}

如何调用ligaInternet() 函数?

【问题讨论】:

    标签: android android-activity broadcastreceiver


    【解决方案1】:

    你可以试试

    MainActivity currentActivity = ((MainActivity)context.getApplicationContext()).getCurrentActivity();
    currentActivity.ligaInternet();
    

    【讨论】:

    • Angel Koh,尝试过您的建议并在“getCurrentActivity()”上收到错误消息:无法解析方法。还有什么想法吗?提前谢谢你。
    • 对不起,我不明白在我的代码中包含示例的位置。你能告诉我使用我的代码片段吗?
    • 看来其他人已经为您的问题提供了解决方案stackoverflow.com/questions/6468463/…
    • 对不起,Angel Koh,我已经尝试过了,但这不是解决方案,因为它启动了活动。我想在活动中调用一个过程,而不是启动整个过程。请帮助我是新手,只是无法自己弄清楚。
    【解决方案2】:

    试试这个。 哥们,把 ligaInternet 方法设为静态,只有静态方法可以从类名中引用。 MainActivity.ligaInternet() 语句现在不正确,因为 ligaInternet() 是一个非静态方法,因此不能从类名中引用它。并从方法中删除受保护的关键字。

    【讨论】:

    • 我认为“MainActivity.ligaInternet()”中的大写“M”是海报部分的错字。这将导致编译错误,而不是崩溃。
    • 照我说的做,将 ligaInternet() 改为“public static void ligaInternet()”,如果遇到任何问题,请告诉我。
    • Arpit Agrawal 您的建议对我不起作用,因为我无法将功能 ligaInternet 设为公共静态。还有什么建议吗?提前谢谢你们!
    【解决方案3】:

    可能的方法。将以下内容放入您的广播接收器中。

    Intent intent2open = new Intent(context, MainActivity.class)
    

    现在在 MainActivity 内部创建一个新方法如下:

    public void onNewIntent (Intent intent) { 
     ligaInternet();
      // This simply calls the function.  
      //so make sure the function is 
      //written somewhere inside  
     //MainActivity as well.
    }
    

    【讨论】:

    • 尝试了您的建议,并没有像以前那样出现应用程序崩溃,但未调用 ligInternet() 函数。在 boradcast 接收器上,我收到一条警告说 intent2open 从未使用过。我认为我在正确的轨道上,但还没有完全到那里。任何进一步的帮助将不胜感激
    猜你喜欢
    • 1970-01-01
    • 2016-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多