原创, 安卓,

Android广播退出报错,unregisterReceiver 解决方法

Android 广播 unregisterReceiver 错误

使用 registerReceiver 和 unregisterReceiver 的时候 前面加上了

getApplicationContext().

代码是: getApplicationContext().unregisterReceiver(myReceiver);

如果使用这些代码未能达到你的目的,那么下面的这段摘自网络的信息或许会有帮助。

下面的是网上的一些参考资料:

这个问题一直困扰着我,试了n种方式,都不行,在网上搜了一圈,没有能用的:

1.ActivityManager manager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);

manager.killBackgroundProcesses(package);

不行

2.android.os.Process.killProcess(android.os.Process.myPid());

也不行

3.manager.restartPackage(package);

还是不行

4.

Intent MyIntent = new Intent(Intent.ACTION_MAIN);

MyIntent.addCategory(Intent.CATEGORY_HOME);

startActivity(MyIntent);

finish();

这个只是退回到桌面,如果打开多个Activity关闭重新打开也会有问题,还是还是不行

看到有说广播机制,发现是个好东东,能彻底解决这个问题,废话不说看代码:

Java代码

//写一个广播的内部类,当收到动作时,结束activity
private BroadcastReceiver br = new BroadcastReceiver() {

	@Override
	public void onReceive(Context context, Intent intent) {
		close();
		unregisterReceiver(this);
	}
	};
	@Override
	protected void onResume() {
		super.onResume();

		//在当前Activity中注册广播
		IntentFilter filter = new IntentFilter();
		filter.addAction(Intent.ACTION_MAIN);
		registerReceiver(this.br, filter); //注册

		System.out.println("Activity02----------------------------onResume");
	}
	/**
	* 关闭
	*/
	public void close(){
		Intent intent = new Intent();
		intent.setAction(Intent.ACTION_MAIN);
		sendBroadcast(intent); //该函数用于发送广播
		// finish();
		System.exit(0);
	}
}

别人写的缺了个地方(unregisterReceiver)这个必须要加,找了个最简单的方法

(6346)

Related Post