如何从broadcastReceiver回调访问MainActivity

时间:2015-08-21 02:07:37

标签: android android-activity broadcastreceiver

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

我想出了一个我无法弄清楚的问题。我看到过类似的问题,但答案对我来说并不清楚。请帮帮我。

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

在课程文件中:

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

在主要活动文件中:

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()函数?

3 个答案:

答案 0 :(得分:1)

你可以尝试

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

答案 1 :(得分:0)

试试这个。 Dude,使ligaInternet方法静态,只能从类名引用静态方法。声明MainActivity.ligaInternet()现在不正确,因为ligaInternet()是非静态方法,因此无法从类名引用它。并从方法中删除protected关键字。

答案 2 :(得分:0)

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

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.
}