android - 从本地服务向 Activity 发送消息的最简单方法是什么

标签 android

我有一项正在监听电话的服务。当手机空闲时,我想向我的 Activity 发送一条消息。看起来我有两个选择来完成这个任务。 BroadcastReceiver 并绑定(bind)到服务。 BroadcastReceiver 看起来是一个更简单的机制,所以我尝试了以下测试。

在我的 Activity 中:

@Override
protected void onStart() {
    super.onStart();
    IntentFilter filter = new IntentFilter("MyAction");
    registerReceiver(new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            Log.d(TAG, "Yay.......");
            abortBroadcast();
        }
    }, filter);
}

在我正在监听事件的服务中,当我检测到所需的事件时:

    Intent localIntent = new Intent(_context, MainActivity.class);
    intent.setAction("MyAction");
    _context.sendOrderedBroadcast(localIntent, null);

在我的测试中,在我观看使用调试器发送的广播后,永远不会调用 onReceive() 方法。我缺少什么?另外,BroadcastReceiver 是本地服务与 Activity 通信的最简单方法吗?

最佳答案

我认为我在最初的测试用例中遇到了一些问题。 1.当我在我的服务中创建我的Intent时,它应该以“action”作为参数。 2. 我相信我需要将 Intent 过滤器添加到我的 list 中。

我现在的工作示例是:

Activity :

        startService(intent);

        IntentFilter filter = new IntentFilter(PhoneListeningService.PHONE_IDLE);
        registerReceiver(new BroadcastReceiver() {
            @Override
            public void onReceive(Context context, Intent intent) {
                Log.d(TAG, "Yay.......");
            }
        }, filter);

list :

    <activity android:name=".MainActivity" android:screenOrientation="portrait" >
       <intent-filter>
            <action android:name="com.ncc.PhoneListeningService.action.PHONE_IDLE" />
        </intent-filter>
    </activity>

服务:

为命名的“action”声明公共(public)常量并广播 Intent 。

public static final String PHONE_IDLE = "com.ncc.PhoneListeningService.action.PHONE_IDLE";

...我的监听器检测到手机空闲:

            Intent intent = new Intent(PHONE_IDLE);
            sendBroadcast(intent);

关于android - 从本地服务向 Activity 发送消息的最简单方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3998650/

相关文章:

Android 测试用例等待回调

android - java 未知主机异常 android

java - Android强制停止回调应用程序?

android - 为 Android 应用程序同步数据库

java - 调用 Intent 时应用程序关闭

Android 有像 Objective C 核心图形这样的核心图形吗?

java - 如果 RxJava observable 需要很长时间,你如何显示微调器?

java - Webview 不响应触摸事件

android - 溢出菜单的工作原理

从 Windows 迁移到 Linux 后,Android Studio 项目中突然缺少 AndroidManifest.xml 文件?