0

プロジェクトのアプリ ショートカットを作成しようとしています。私のプロジェクトには、いくつかのアクティビティにフラグメントが含まれています。アプリのショートカット インテントは、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) ここで何が欠けていますか?

4

0 に答える 0