(kotlin初学者)广播接收器收不到正确的的context

Echo-YeZi 2019-04-17 02:58:09
在MainActivity中动态注册广播然后发布广播
然而广播接收器onReceive收到的context是android.app.Application,并不是期望的com.example.broadcastdemo2.MainActivity
因此 dialogBuilder.show()无法使用
代码片段如下

//MainActivity

class MainActivity : BaseActivity() {

private var localReceiver: MyBcReceiver? = null
private var localBroadcastManager: LocalBroadcastManager? = null
private var intentFilter: IntentFilter? = null

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main) //初始化界面
localBroadcastManager = LocalBroadcastManager.getInstance(this@MainActivity) //获取broadcast管理器
Log.e("main", "this:" + this)
Log.e("main", "MainContext :" + this@MainActivity)
//初始化广播接收者,设置过滤器
localReceiver = MyBcReceiver() //获取广播接收器
intentFilter = IntentFilter() //获取过滤器
intentFilter!!.addAction("com.jay.mybcreceiver.LOGIN_OTHER") //添加过滤规则
localBroadcastManager!!.registerReceiver(localReceiver!!, intentFilter!!)

val btn_send = findViewById<View>(R.id.btn_send) as Button
btn_send.setOnClickListener {
val intent = Intent("com.jay.mybcreceiver.LOGIN_OTHER")
//localBroadcastManager!!.sendBroadcast(intent)
Handler().postDelayed(Runnable { localBroadcastManager!!.sendBroadcast(intent)}, 100L)
}
}

override fun onDestroy() {
super.onDestroy()
localBroadcastManager!!.unregisterReceiver(localReceiver!!)
}
}

//MyBcReceiver
class MyBcReceiver : BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent?) {
Log.e("dynamic receiver", "Context :" + context)
Log.e("dynamic receiver", "Intent := " + intent)
Log.e("dynamic receiver", "this := " + this@MyBcReceiver)
val dialogBuilder :AlertDialog.Builder = AlertDialog.Builder(context)
dialogBuilder.setTitle("警告:")
dialogBuilder.setMessage("您的账号在别处登录,请重新登陆~")
dialogBuilder.setCancelable(false)
dialogBuilder.show()
}
}


运行结果如下

抛出错误
...全文
606 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
Echo-YeZi 2019-04-20
  • 打赏
  • 举报
回复
引用 3 楼 王能 的回复:
这是java代码,自行转成科特林的吧
我试试自己转成kotlin 谢谢大佬
Echo-YeZi 2019-04-20
  • 打赏
  • 举报
回复
引用 3 楼 王能 的回复:
这是java代码,自行转成科特林的吧
不是 kotlin的 我直接从kotlin入手的,,,
王能 2019-04-18
  • 打赏
  • 举报
回复
这是java代码,自行转成科特林的吧
王能 2019-04-18
  • 打赏
  • 举报
回复
问题当然在context了,Application和service只能弹全局的对话框。

    public static Activity mTopActivity;
        registerActivityLifecycleCallbacks(new Application.ActivityLifecycleCallbacks() {
            @Override
            public void onActivityCreated(Activity activity, Bundle bundle) {
                mActivityDestroyCount++;
                mIsAcitivytDestroy = false;
            }

            @Override
            public void onActivityStarted(Activity activity) {
                mActivityStopCount++;
                mIsActivityInBackground = false;
            }

            @Override
            public void onActivityResumed(Activity activity) {
                mTopActivity = activity;
            }

            @Override
            public void onActivityStopped(Activity activity) {
                mActivityStopCount--;
                if (mActivityStopCount == 0) {
                    mIsActivityInBackground = true;
//                    Utils.Toast("切到后台");
                }
            }

            @Override
            public void onActivityDestroyed(Activity activity) {
                mActivityDestroyCount--;
                if (mActivityDestroyCount == 0) {
                    mTopActivity = null;
                    mIsAcitivytDestroy = true;
//                    Utils.Toast("所有activity已销毁");
                }
            }

            @Override
            public void onActivitySaveInstanceState(Activity activity, Bundle outState) {
            }

            @Override
            public void onActivityPaused(Activity activity) {
            }
        });
在Application里加上这道逻辑就行了,弹窗直接用topActivity即可 还有,你的receive貌似没啥用
Echo-YeZi 2019-04-17
  • 打赏
  • 举报
回复
但是在onReceive中使用

Toast.makeText(context, "重复登录", Toast.LENGTH_SHORT).show()
这个是可以正常执行的.... 难道说问题不在context???

80,348

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧