2017-04-05 76 views
1

我在我的应用程序中使用BroadCast Receiver。我在我的应用程序中有很多活动。在MainActivity.java二手broadcard接收机如下:使用广播接收器在应用程序中的所有活动

private BroadcastReceiver smsReceiver = new BroadcastReceiver() { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     // Retrieves a map of extended data from the intent. 
     final Bundle bundle = intent.getExtras(); 
     try { 
      if (bundle != null) { 

      } 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 
}; 

我当消息即将到来,MyActivity在焦点通知。 现在当我的其他活动焦点时,我没有得到通知。 有没有一种常见的方式使用BroadCast的东西作为全球性的方式?为所有活动?

+0

你在哪里注册/取消注册此接收器? – earthw0rmjim

+0

您是否在'manifest.xml'中注册了receiver? –

+0

@ MainActivity的earthw0rmjim OnREsume()和OnPause()。 – AskingToStack

回答

3

/注销创建抽象活动称为AbstractActivity。使所有其他活动扩展此抽象活动并在该抽象活动中声明broadCastReceiver。

public AbstractActivity extends Activity{....} 

public SubActivity extends AbstractActivity{...} 

或者你可以使用EventBus:

EventBus

阅读完整getting started guide

1

有没有一种常见的方式使用BroadCast的东西作为全球性的方式?

你应该注册您在BroadcastReceiver而不是具体Activity

<receiver 
     android:name="com.example.android.NotificationReceiver" 
     android:permission="com.google.android.c2dm.permission.SEND" > 
     <intent-filter> 
      <action android:name="com.google.android.c2dm.intent.RECEIVE" /> 
      <category android:name="com.example.android" /> 
     </intent-filter> 
    </receiver> 

方式二: 做出独立的自定义类的BroadcastReceiver和基址寄存器的所有Activity

0

广播接收机始终是他们的util你注销广播接收机。

为了解决您的问题,您必须在应用程序级别注册广播。

如:

public MyApplication extends Application { 

onCreate() { 

// register broadcast receiver here 

} 

    private BroadcastReceiver smsReceiver = new BroadcastReceiver() { 
     @Override 
     public void onReceive(Context context, Intent intent) { 
      // Retrieves a map of extended data from the intent. 
      final Bundle bundle = intent.getExtras(); 
      try { 
       if (bundle != null) { 
       } 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
     } 
    }; 
    } 

那之后,你可以在任何时候进行任何行动,现在播出的应用级接收器。你也不会面临任何活动内存泄漏。

+0

这是另一种解决方案.. !!谢谢@jitesh先生 – AskingToStack

相关问题