私はすでにここに回避策を投稿しています: https://code.google.com/p/android/issues/detail?id=76026
そこで、インストルメンテーションを含むレシピを次に示します。
アクション com.example.action.VIEW をリッスンするインストルメンテーション内に BroadcastReceiver を登録します。
IntentFilter intentFilter = new IntentFilter("com.example.action.VIEW");
intentFilter.addDataScheme("myschema");
intentFilter.addCategory(Intent.CATEGORY_BROWSABLE);
Context.registerReceiver(new MyBroadcastReceiver(), intentFilter);
アンパサンドを %26 に置き換え (任意のものに置き換えることができます)、インテント com.example.action.VIEW を送信します。
インテントを受信すると、BroadcastReceiver は %26 をアンパサンドに変換し、必要なアクションを含む新しいインテントをアプリに送信します。
public final void onReceive(final Context context, final Intent intent) {
intent.setAction(Intent.ACTION_VIEW);
intent.setData(Uri.parse(intent.getDataString().replaceAll("%26", "&")));
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent);
}
基本的に、BroadcastReceiver プロキシとして機能します。