シナリオ
HTML5 オフラインパッケージの <input type="file"/> タグのデフォルトのファイル選択動作がニーズを満たさない場合は、カスタムイメージ選択機能を実装できます。カスタムイメージ選択スタイルのカスタマイズ、複数イメージの選択、動的権限の処理などの機能には、MPH5OpenFileChooserProvider を使用します。
実装
mPaaS の初期化が完了した後のコールバックで
MPH5OpenFileChooserProviderを登録します。H5Utils.setProvider(MPH5OpenFileChooserProvider.class.getName(), new MPH5OpenFileChooserProvider() { @Override public boolean needIntercept(Activity activity, ValueCallback valueCallback, boolean b, APFileChooserParams apFileChooserParams) { // カスタムイメージ選択機能が不要な場合は、false を返して HTML5 コンテナーのインターセプトを回避します。デフォルトでは、コンテナーはインターセプトされません。 // カスタムイメージ選択機能を使用するには、HTML5 コンテナーをインターセプトし、true を返します。 return true; } @Override public void openFileChooser(Activity activity, ValueCallback valueCallback, boolean b, APFileChooserParams apFileChooserParams) { // 有効な URI を取得し、フロントエンドに渡します。 // このメソッドは必ず呼び出す必要があります。呼び出さない場合、次のクリックコールバックは実行されません。 // 1. intent を使用して、システムアルバムまたはカメラを呼び出す Activity を開きます。 // 2. 選択したイメージを取得します。 // 3. ページを閉じ、valueCallback を介してイメージをフロントエンドに渡します。 valueCallback.onReceiveValue(xx); } });重要valueCallback.onReceiveValue(xx)関数は必ず呼び出す必要があります。呼び出さない場合、次のクリックコールバックは実行されません。openFileChooserコールバック関数でイメージを選択して処理します。intentを使用してActivityを開き、システムのフォトアルバムまたはカメラを開きます。選択したイメージを取得します。
Activityを閉じ、valueCallbackを使用してイメージをフロントエンドに渡します。
参考ソリューション
ソリューション 1
openFileChooserコールバックメソッドでブロードキャストリスナーを登録します。openFileChooserメソッドで、Intentを使用してカスタムActivityに遷移します。システムのカメラまたはイメージ選択 SDK を呼び出します。イメージクリッピング機能などの拡張機能を追加できます。
イメージ選択
Activityを使用して、最終的に選択されたイメージを取得します。openFileChooserコールバックのブロードキャストリスナーにブロードキャストを送信してから、Activityを閉じます。値は
WebViewコンポーネントのvalueCallback.onReceiveValue(xx)メソッドを使用してフロントエンドに渡されます。
ソリューション 2
openFileChooserメソッドで、Intentを使用してActivityに遷移し、そのActivityにvalueCallbackを渡します。システムのカメラまたはイメージ選択 SDK を呼び出します。イメージクリッピング機能などの拡張機能を追加できます。
データは
WebViewのvalueCallback.onReceiveValue(xx)メソッドを介してフロントエンドに渡されます。Activityを閉じます。