2016-06-24 2 views
0

У меня есть функция в действии. Я хочу запустить эту функцию с помощью broadcastreciver. Кто-нибудь знает об этом, тогда скажите мне, как я могу это сделать. Заранее спасибо.андроид как запустить функцию с broadcastreciver?

public class Myclass extends BroadcastReceiver{ 
    @Override 
    public void onReceive(Context context, Intent intent) { 

    } 
} 

Это мой broadcastreceiver класса я хочу, чтобы запустить функцию, которая в моем activty скажите, пожалуйста, с каким-то кодом, как это сделать. Заранее спасибо

ответ

0

Я знаю, что это цитата наиф, но вы могли бы вызвать статический метод в своей деятельности.

В вашей деятельности вы объявляете метод как это:

public static <return_type> yourMethod(<input_objs>){ 
.... 
Your code 
.... 
} 

В приемнике вы можете использовать эту функцию только призывающую:

YourActivityClass.yourMethod(<input_objs>); 

Я надеюсь, что это помогло.

+0

Вы, пожалуйста, скажите мне с кодом –

0

Вы почти находитесь. Просто создайте свой метод в Activity и вызовите этот метод экземпляра объекта Activity. Помните, что ваш метод внутри вашего Activity не должен быть закрытым.

public class Myclass extends BroadcastReceiver{ 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     new YourActivity().yourFunction(); 
    } 
} 

Если вы хотите создать статический метод внутри вашего Activity затем

public class Myclass extends BroadcastReceiver{ 
     @Override 
     public void onReceive(Context context, Intent intent) { 
      YourActivity.yourFunction(); 
     } 
    } 

Чтобы вызвать Broadcast, вы должны пройти Intent. Если вы хотите, чтобы вызвать его из любого Activity затем

Intent intent = new Intent(); 
this.sendBroadcast(intent); 

Если вы хотите, чтобы вызвать Broadcast из Fragment затем

Intent intent = new Intent(); 
getActivity().sendBroadcast(intent); 
+0

как создать статический метод? –

+0

Используйте ключевое слово _static_ перед возвратом вашего метода – Prudhvi

0

Вы можете объявить интерфейс в Myclass и реализовать его в ваш MainActivity

public class Myclass extends BroadcastReceiver{ 

    public interface MyClassInterface { 
     void onMyClassReceive(); 
    } 

    private MyClassInterface mListener; 

    public Myclass(MyClassInterface mMyClassInterface) { 
     mListener = mMyClassInterface; 
    } 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     mListener.onMyClassReceive(); 
    } 
} 

Затем в вашем MainActivity:

public class MainActivity implements Myclass.MyClassInterface { 

private mMyClass Myclass = new Myclass(this); 
    @Override 
    public void onMyClassReceive() { 
     // Do stuff when Myclass.onMyClassReceive() is called, 
     // which will be called when Myclass.onReceive() is called. 
    } 
} 
1

Если метод, который вы хотите выполнить, нуждается в вашем экземпляре активности, то вы можете зарегистрировать широковещательный приемник внутри своей деятельности, чтобы он мог получить доступ к состоянию и функциям вашей активности. В вашей деятельности метод «OnCreate»:

final IntentFilter intentFilter = new IntentFilter(); 
    intentFilter.addAction("Your Intent action here"); 
    intentFilter.addAction("Another action you want to receive"); 

    final BroadcastReceiver myReceiver = new BroadcastReceiver() { 
     @Override 
     public void onReceive(Context context, Intent intent) { 
      theFunctionYouWantToExecute(); 
     } 
    }; 

    registerReceiver(myReceiver, intentFilter); 

И в методе «OnDestroy»:

unregisterReceiver(myReceiver); 

Имейте в виду, что в этом случае ваш вещательный приемник имеет полный доступ к вашему государству деятельности, НО это жизненный цикл будет обусловлен жизненным циклом деятельности. Другой вариант, который у вас есть, - объявить свой метод активности статичным, чтобы его можно было выполнить в любой части вашего приложения.

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