2017-05-27 67 views
-1

我无法调用广播接收对象的活动功能。有一个运行敬酒,因此执行不流存在,但本身的活动功能不被称为在广播接收机不叫活动函数对象

protected void onCreate() 
    { 
     ... 
     ... 
     this.registerReceiver(receiver, new IntentFilter("ACTION")); 

    } 

    BroadcastReceiver receiver = new BroadcastReceiver() { 

    Toast.makeText(MainActivity.this, "Printed", Toast.LENGTH_LONG).show(); // This runs 

    FunctionA(); // <-- This function is not called 
    }; 

    public void FunctionA() 
    { 
    ... // Function holds view objects 
    } 

我环顾四周,试图像这样的接收对象的内部没有任何的运气

 BroadcastReceiver receiver = new BroadcastReceiver() { 

      Toast.makeText(MainActivity.this, "Printed", Toast.LENGTH_LONG).show(); //<--- This runs fine   

      MainActivity.this.runOnUiThread(new Runnable() { 
      @Override 
      public void run() { 

       FunctionA(); // <-- Function still is not called 

      } 
     }); 

    } 

问题是为什么不调用函数?有没有办法在该广播接收器对象中调用该函数?

+0

您确切地说,确定“函数”没有被调用? FunctionA()'确实*做了什么? – CommonsWare

+0

该函数负责改变UI上的视图。我甚至有Logs中没有打印在Logcat中的函数。 – Czar

回答

1

您的代码不在BroadcastReceiveronReceive()方法中。 onReceive()是当广播到达什么被调用。

现在,您的代码正在执行时BroadcastReceiver实例化。这不太可能是你想要的。

更普遍,这是不可能的使用BroadcastReceiver,监听系统广播,是什么问题,你正在试图解决相应的解决方案。 LocalBroadcastManager或事件总线的一些其它形式是作为过程中的消息的更好的解决方案,例如。

+0

感谢您的建议,你的想法实际上工作。我没有使用LocalBroadcastManager,而是使用EventBus。 – Czar