プロジェクトのアプリ ショートカットを作成しようとしています。私のプロジェクトには、いくつかのアクティビティにフラグメントが含まれています。アプリのショートカット インテントは、d を使用しPersistentBundle
ます。
私の意図は次のようになります。
public static Intent getAppShortcutIntent(@NonNull Context context) {
Intent intent = new Intent(context, MyActivity.class);
intent.putExtra(MyActivity.EXTRA_FRAGMENT_TO_LAUNCH, getString(MyFragment.class));
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
intent.setAction(Intent.ACTION_VIEW);
return intent;
}
これを行う方法は、シリアル化とシリアル化解除を String に行い、Class オブジェクトに戻すことです。以下のように ByteArrayOutputStream を使用して変換を試みました。
ByteArrayOutputStream bo = new ByteArrayOutputStream();
ObjectOutputStream so = new ObjectOutputStream(bo);
so.writeObject(object);
so.flush();
return new String(bo.toByteArray());
そして、以下のように変換します。
String serializedObject; // This is what is serialized above
byte[] b = serializedObject.getBytes();
ByteArrayInputStream bi = new ByteArrayInputStream(b);
ObjectInputStream si = new ObjectInputStream(bi);
return (Class<?>) si.readObject();
ただし、これは機能しないようです。MyFragment.class を文字列に変換して元に戻しています。しかし、より具体的には例外をスローします (Exceptionjava.io.StreamCorruptedException: 無効なストリーム ヘッダー: EFBFBDEF) ここで何が欠けていますか?