Android 4.3 でコピーするとエラーが発生する現象について

java.lang.IllegalStateException: beginBroadcast() called while already in a broadcast

Android4.3対応中に検出された上記のエラーについてですが、簡素な検証コードでもエラーが発生してしまいました。
バックグラウンドでクリップボードの監視をしていると落ちてしまいます。

まとめますと、aNdClip固有の問題ではなく、バックグラウンドでクリップボードを監視する機能を使用すると当現象が発生する状態、と認識しています。

OS側に修正が入らない限り、OnPrimaryClipChangedListenerを利用したクリップボードの監視を止めるしかないかもしれません。
方法としてはAndroid2.3以前の時のように定期的にポーリングするとかがありますが、今さら戻るなんて…。

今のところAndroid OS側のアップデートで修正されるものと考えています。
ですので大変申し訳ありませんが、OS4.3は一旦非対応となります。
2013/08/01 10:00追記
と考えていましたが、OSアップデートを待っていられないので、暫定対応として定期的にポーリングする方式(Android OS2.3以下と同様)に修正したバージョンを近いうちにリリース致します。

Google先生、これは仕様ではなくてバグですよね?

2013/08/07 00:00追記
Issue登録されてました。

2013/08/29 00:00追記
Nexus7(2013)はJSS15Qで修正されたようです。
シレっと直されると対応に困るのですがね…。

—————-
以下、検証の内容です。

■検証ソース
アプリを起動した後、戻るボタンでは無くホームキー押下などで他のアプリを開いて、コピーを実行するとコピーを実行したアプリ側で先頭のエラー(java.lang.IllegalStateException)が発生します。

■Activityのソース抜粋

public class MainActivity extends Activity implements OnPrimaryClipChangedListener {

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

		ClipboardManager cm = (ClipboardManager)getSystemService(CLIPBOARD_SERVICE);
		cm.addPrimaryClipChangedListener(this);
	}

	@Override
	protected void onDestroy() {
		super.onDestroy();

		ClipboardManager cm = (ClipboardManager)getSystemService(CLIPBOARD_SERVICE);
		cm.removePrimaryClipChangedListener(this);
	}

	@Override
	public void onPrimaryClipChanged() {
		Toast.makeText(this, "onPrimaryClipChanged", Toast.LENGTH_SHORT).show();
	}
}

単純に、クリップボードの監視をさせているだけのコードになります。
これだけでもエラーが発生してしまうので、アプリ側からは打つ手が見つかりません…。

コメントを残す

メールアドレスが公開されることはありません。