标签: localbroadcastmanager

奥托vs LocalBroadcast:

我非常喜欢开源贡献广场已经对Android社区做了什么,并正在调查他们的最新贡献Otto(事件总线)

http://square.github.io/otto/

深入挖掘我看到Otto使用反射并且没有有序广播(一种模式,其中未消息的消息从一个接收器传递到下一个接收器,听取相同类型的事件)Otto相信更多的火灾和忘记模型.

现在android LocalBroadcastManager在其v4支持库中有(LBM)用于相同的目的,尽管它更笨重并且对传递的对象有更多限制.但在更明亮的一面,它确实支持有序广播,它更像是正常的广播.

Otto和LBM都处于相同的处理空间内,因此就速度而言,我猜两者都是相同的.我能看到的唯一真正的区别是Otto允许您定义自定义事件,而您不必序列化/包裹对象.

因此,我真正的问题是,如果LBM做同样的事情,你何时会使用Otto.

参考文献:

http://nick.perfectedz.com/otto-event-system/

使用Intents或事件总线在同一个应用程序中进行通信

https://plus.google.com/107049228697365395345/posts/6j4ANWngCUY

android android-intent otto localbroadcastmanager

44
推荐指数
2
解决办法
8728
查看次数

在AndroidManifest.xml中注册本地BroadcastReceiver?

无论如何在AndroidManifest.xml中注册BroadcastReceiver并接收由LocalBroadcastManager发送的广播?

目前我必须打电话

registerReceiver(BroadcastReceiver receiver, IntentFilter filter) 
Run Code Online (Sandbox Code Playgroud)

要注册一个Receiver,在AndroidManifest.xml中声明将无法正常工作.但这意味着我必须确切地知道接收者的包名和类名,而不仅仅是意图过滤器.是否可以在清单文件中声明接收器?

以下是我目前的代码.

AndroidManifest.xml中:

...
<receiver 
    android:name="com.example.test.MessageReceiver"
    android:enabled="true" >
    <intent-filter>
        <action android:name="com.m2x.test.intent.MESSAGE_RECEIVED" />
    </intent-filter>
</receiver>
...
Run Code Online (Sandbox Code Playgroud)

MainActivity.java:

Intent intent = new Intent();
intent.setAction("com.m2x.test.intent.MESSAGE_RECEIVED");

LocalBroadcastManager manager = LocalBroadcastManager.getInstance(mContext.get());
manager.sendBroadcast(intent);
Run Code Online (Sandbox Code Playgroud)

MessageReceiver.java

public class MessageReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {

        if (intent.getAction().equals("com.m2x.test.intent.MESSAGE_RECEIVED")) {
            Toast.makeText(context, "user message received", Toast.LENGTH_SHORT).show();
        }

    }
}
Run Code Online (Sandbox Code Playgroud)

xml android broadcastreceiver localbroadcastmanager

28
推荐指数
1
解决办法
9295
查看次数

LocalBroadcastManager 已被弃用。我应该用什么代替它?

我正在 Android 中处理这个项目,其中一个方面需要一个带有前台服务的 CountdownTimer。Stack Overflow 上的其他一些答案提到 LocalBroadcastManager 适合我的需求。

然而,Android Developers 中的文档提到它已被弃用。关于我应该在它的位置使用什么的任何建议?文档提到了使用 LiveData,但我想知道是否有更简单的替代方法。

service android localbroadcastmanager android-livedata

17
推荐指数
1
解决办法
4614
查看次数

我可以在Android上使用AlarmManager和LocalBroadcastManager吗?

我有这个代码:

private AlarmManager alarmManager = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
private PendingIntent alarmIntent = PendingIntent.getBroadcast(this, 0, new Intent("my action-name"), 0);

alarmManager.setInexactRepeating((int)AlarmManager.ELAPSED_REALTIME_WAKEUP,     SystemClock.elapsedRealtime() + autoUpdateIntervalInMinutes * 60 * 1000,  autoUpdateIntervalInMinutes * 60 * 1000, alarmIntent);
Run Code Online (Sandbox Code Playgroud)

但是我想为LocalBroadcastManager更改它.这可能吗?

android alarmmanager localbroadcastmanager

11
推荐指数
1
解决办法
1728
查看次数

使用LocalBroadcastManager注册的BroacastReceiver的onReceive()运行在哪个线程上?

我在偏好活动中注册广播接收器,并从(唤醒)IntentService发送(同步)广播.显然onReceive在服务的线程上运行.这是我的错吗?是否记录了行为?

偏好活动:

public final class SettingsActivity extends BaseSettings {

    private static CharSequence sMasterKey;
    private CheckBoxPreference mMasterPref;
    // Receiver
    /** If the master preference is changed externally this reacts */
    private BroadcastReceiver mExternalChangeReceiver =
        new ExternalChangeReceiver();

    public static void notifyMonitoringStateChange(Context ctx,
            CharSequence action, boolean isToggling) {
        final LocalBroadcastManager lbm = LocalBroadcastManager
            .getInstance(ctx);
        Intent intent = new Intent(ctx, ExternalChangeReceiver.class);
        intent.setAction(action.toString());
        intent.putExtra(TOGGLING_MONITORING_IN_PROGRESS, isToggling);
        lbm.sendBroadcastSync(intent);
    }

    @Override
    protected void onStart() {
        super.onStart();
        final LocalBroadcastManager lbm = LocalBroadcastManager
            .getInstance(this);
        lbm.registerReceiver(mExternalChangeReceiver, new IntentFilter(
            ac_toggling.toString()));
    }

    @Override …
Run Code Online (Sandbox Code Playgroud)

multithreading android broadcastreceiver localbroadcastmanager

10
推荐指数
2
解决办法
3095
查看次数

LocalBroadcastManager 现已弃用,如何将数据从服务发送到活动?

我有一项服务需要通知主要活动。我用过LocalBroadcastManager,效果很好,但是LocalBroadcastManager已被弃用。

这是我在服务中的实际代码:

public void onTokenRefresh() {
      
    /* build the intent */
    Intent intent = new Intent(ACTION_TOKENREFRESHED);
    intent.putExtra("token", "xxx");
    
    /* send the data to registered receivers */
    try{
      LocalBroadcastManager.getInstance(this).sendBroadcast(intent);
    } catch (Throwable e){
      //no exception handling
    }  
  
  }
Run Code Online (Sandbox Code Playgroud)

在主要活动中,我收到如下通知:

context.registerReceiver(broadcastReceiver, intentFilter);
Run Code Online (Sandbox Code Playgroud)

我现在可以使用什么来删除已弃用的警告?我发现的有关从服务向活动发送数据的所有示例都使用 LocalBroadcastManager。有人可以给我一个可行的模型来迁移现有代码吗?

笔记

在我的示例中, TheonTokenRefresh是从 a 内部调用的background thread。这非常重要,因为这意味着我可以同时接收多个 onTokenRefresh,并且我必须将所有这些令牌转发到该活动。大多数提供的解决方案都使用实时数据,但做出如下声明:

public static final MutableLiveData<String> tokenLiveData = new MutableLiveData<>();

Background Thread1:
tokenLiveData.postValue(Token1);

Background Thread2 (at same time):
tokenLiveData.postValue(Token2);
Run Code Online (Sandbox Code Playgroud)

是否会将同时收到的所有代币转发到观察代币LiveData 的主要活动?主 Activity 一定会收到 token1 和 …

java android broadcastreceiver android-service localbroadcastmanager

10
推荐指数
1
解决办法
3904
查看次数

服务未收到活动的本地广播

我有一个Activity我在BroadcastReceiver本地注册如下:

public class SomeActivity extends Activity{

    public static final String PERFORM_SOME_ACTION = "PERFORM_SOME_ACTION";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.some_activity_layout);

        .....
        .....

        IntentFilter filter = new IntentFilter();
        filter.addAction(PERFORM_SOME_ACTION);

        receiver = new BroadcastReceiver() {
            @Override
            public void onReceive(Context context, Intent intent) {
                // perform some action ...
            }
        };

        registerReceiver(receiver, filter);
    }

    .....
    .....
}
Run Code Online (Sandbox Code Playgroud)

我有一个Service广播Intent如下:

@Override
public int onStartCommand(Intent intent, int flags, int startId) {        

    Intent i = new Intent(SomeActivity.PERFORM_SOME_ACTION);
    sendBroadcast(i); …
Run Code Online (Sandbox Code Playgroud)

android android-service android-broadcast localbroadcastmanager android-broadcastreceiver

9
推荐指数
1
解决办法
2870
查看次数

有没有办法判断是否收到了LocalBroadcastManager广播?

有没有办法判断是否收到了LocalBroadcastManager广播?还是正在听?

基本上我有一个IntentService监听Google Cloud Messages.当它得到一个我需要显示通知或警告我的主要服务,有一个新的消息 - 至关重要的是,我不想要两个!所以我需要知道我的主要服务是否处理了该消息......

显然,可以使用sendOrderedBroadcast和BroadcastReceiver来完成它,但这对于我简单的私有内部进程需求来说似乎有些过分.

android broadcastreceiver android-broadcast localbroadcastmanager

8
推荐指数
1
解决办法
1910
查看次数

在manifest.xml中声明的BroadcatReceiver未接收LocalBroadcastManager意图

虽然可以通过代码声明"本地"BroadcastReceiver,因此它接收通过LocalBroadcastManager.Ex发布的意图.

LocalBroadcastManager.getInstance(this).registerReceiver(new FooReceiver(), new IntentFilter("foo_intent_filter"));
Run Code Online (Sandbox Code Playgroud)

我想知道是否可以通过manifest .xml(cleaner)声明这样的接收器.

当我使用"清单方式"时,接收者没有"接收"意图.

  <receiver
        android:name="FooReceiver"
        android:enabled="true"
        android:exported="false" >
        <intent-filter>
            <action android:name="foo_intent_filter" />
        </intent-filter>
  </receiver>
Run Code Online (Sandbox Code Playgroud)

我错过了什么吗?或代码方式是唯一可行的解​​决方案.

谢谢

android broadcastreceiver localbroadcastmanager

7
推荐指数
1
解决办法
1095
查看次数

无法在语句android.support.v4.content.LocalBroadcastManager上解析导入LocalBroadcastManager;

在将eclipse项目导入Android Studio时遇到此错误。它显示了将库添加Gradle: com.android.support:support-core-utils-27.1.1到类路径的建议。我已经在build.gradle文件中添加了库。

这是我的gradle文件。

apply plugin: 'com.android.application'

android {
compileSdkVersion 27
buildToolsVersion "28.0.0"

defaultConfig {
    applicationId "com.example.tracking"
    minSdkVersion 17
    targetSdkVersion 27
}

buildTypes {
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
    }
}
}

allprojects {
repositories {
    google()

}
}

dependencies {


implementation project(':asciiProtocol')
implementation project(':deviceList')
implementation project(':captureActivity')
implementation 'com.android.support:support-v4:27.1.1'
implementation 'com.android.support:appcompat-v7:27.1.1'
implementation "com.android.support:support-core-utils:27.1.1"
implementation 'com.google.code.gson:gson:2.8.2'
implementation 'com.google.code.gson:gson:2.8.2'
implementation 'com.google.code.gson:gson:2.8.2'
implementation files('libs/opencsv-2.3.jar')
implementation files('libs/rfid.reader.api.jar')
implementation files('libs/scannercontrol.jar')
implementation files('libs/Zebra.jar')

configurations.all {
    resolutionStrategy.eachDependency { DependencyResolveDetails details -> …
Run Code Online (Sandbox Code Playgroud)

android localbroadcastmanager android-broadcastreceiver

7
推荐指数
2
解决办法
4301
查看次数