80,348
社区成员
发帖
与我相关
我的任务
分享
//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()
}
}
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貌似没啥用
Toast.makeText(context, "重复登录", Toast.LENGTH_SHORT).show()
这个是可以正常执行的....
难道说问题不在context???