このアプリの WebView は、アップロード ボタンのあるページを開きます。
以下は、ギャラリーまたはカメラから画像をアップロードするためのダイアログ ボックスを開くためのコード ブロックです。
私のアクティビティ内には次のものがあります。
private WebView wv;
//make HTML upload button work in Webview
private ValueCallback<Uri> mUploadMessage;
private final static int FILECHOOSER_RESULTCODE=1;
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
if(requestCode==FILECHOOSER_RESULTCODE)
{
if (null == mUploadMessage) return;
Uri result = intent == null || resultCode != RESULT_OK ? null
: intent.getData();
mUploadMessage.onReceiveValue(result);
mUploadMessage = null;
}
}
onCreate 内には、次のものがあります。
wv.setWebChromeClient(new WebChromeClient() {
private Uri imageUri;
public void openFileChooser(ValueCallback<Uri> uploadMsg, String acceptType ) {
File imageStorageDir = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), "MyApp");
// Create the storage directory if it does not exist
if (! imageStorageDir.exists()){
imageStorageDir.mkdirs();
}
File file = new File(imageStorageDir + File.separator + "IMG_" + String.valueOf(System.currentTimeMillis()) + ".jpg");
imageUri = Uri.fromFile(file);
final List<Intent> cameraIntents = new ArrayList<Intent>();
final Intent captureIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
final PackageManager packageManager = getPackageManager();
final List<ResolveInfo> listCam = packageManager.queryIntentActivities(captureIntent, 0);
for(ResolveInfo res : listCam) {
final String packageName = res.activityInfo.packageName;
final Intent i = new Intent(captureIntent);
i.setComponent(new ComponentName(res.activityInfo.packageName, res.activityInfo.name));
i.setPackage(packageName);
i.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
cameraIntents.add(i);
}
mUploadMessage = uploadMsg;
Intent i = new Intent(Intent.ACTION_GET_CONTENT);
i.addCategory(Intent.CATEGORY_OPENABLE);
i.setType("image/*");
Intent chooserIntent = Intent.createChooser(i,"Image Chooser");
chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, cameraIntents.toArray(new Parcelable[]{}));
MainActivity.this.startActivityForResult(chooserIntent, FILECHOOSER_RESULTCODE);
}
[アップロード] ボタンをクリックすると、カメラ、画像ギャラリー、ファイル エクスプローラーのオプションが表示されます。
ファイル エクスプローラーとギャラリーは期待どおりに動作しています。問題は、カメラを使用して写真を撮ると、「ファイルが選択されていません」というステータスを示す「ファイルを選択」オプションにアップロードされないことです。
カメラの選択について:
カメラを使用してスナップショットを撮る場合:戻るオプションとチェック オプションが表示されます。
チェックマークの選択について:
ファイルがアップロードされていません:(「ファイルを選択」オプションで
期待されること:
適切な書き込み権限があることを確認したため、「MyApp」という名前のディレクトリが生成され、その中に写真が保存されます (Web ページのアップロード ボタンをクリックした後にカメラを起動して撮影した場合)。
チェックマークを押した後、カメラから撮影した写真 (MyApp ディレクトリに保存されたもの) を選択するようにアプリケーションにプログラムで指示する方法は?