2015-08-21 5 views
1

Я новичок в разработке Android и сумел получить эти далекие ответы на вопросы и ответы на StackOverflow. Всем спасибо.Как получить доступ к MainActivity из обратного вызова broadcastReceiver

У меня возникла проблема, которую я просто не могу понять. Я видел похожие проблемы, но ответы мне не ясны. Пожалуйста, помогите мне в этом.

Я хочу вызвать метод в моей основной деятельности из другого класса. При попытке вызова метода приложение падает. Вот код:

О файле класса:

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

ответ

1

вы можете попробовать

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

Angel Koh, Пытались вы и получите предложение приемлемо ошибку на "getCurrentActivity()", говоря: Канот решить метод. Какие-нибудь дальнейшие идеи? Заранее спасибо. –

+0

Извините, я не понимаю, где включить пример в мой код. Не могли бы вы показать мне, используя мой снайпер кода? –

+0

кажется, что у кого-то еще есть решение для вашей проблемы http://stackoverflow.com/questions/6468463/start-activity-inside-onreceive-broadcastreceiver –

0

попробовать это. Чувак, сделайте метод ligaInternet статическим, только статический метод может ссылаться на имя класса. Утверждение MainActivity.ligaInternet() теперь некорректно, потому что ligaInternet() является нестационарным методом, поэтому на него нельзя ссылаться от имени класса. а также удалить защищенное ключевое слово из метода.

+0

Я думаю, что столица «М» в «MainActivity.ligaInternet()» является опечаткой на стороне плаката. что приведет к ошибке компиляции, а не к сбою. –

+0

Как я уже сказал, измените ligaInternet() на "public static void ligaInternet()" и дайте мне знать, если у вас возникнут какие-либо проблемы с этим. –

+0

Arpit Agrawal Ваше решение не работает для меня, поскольку я не могу сделать функцию ligaInternet общедоступной. Любые другие предложения? Спасибо заранее, ребята! –

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

пробовал ваш sugestion и не получил краху приложения, как раньше, но функция ligInternet() не вызывается. На приемнике boradcast я получаю предупреждение о том, что намерение2open никогда не используется. Я думаю, что я на правильном пути, но пока не совсем там. Любая дополнительная помощь будет оценена –

Смежные вопросы