【发布时间】:2018-08-08 18:02:59
【问题描述】:
我一直在尝试通过来自画廊和相机的 webview 从 facebook 上传 Workplace 中的图像。
从图库中它可以正常工作,但从相机中,图像不会出现在上传中。
我已经看到类似this 和this 这样的问题的帖子,但我看不出有什么问题。
这是我的课:
public class WorkplaceActivity extends BaseActivity implements WorkplaceContract.View {
private WorkplacePresenter workplacePresenter;
private Tracker trackerGA;
private MyApplicaton appGA;
private Toolbar toolbar;
private WebView ctWebView;
private ValueCallback<Uri[]> mUploadMessage;
private final static int FILECHOOSER_RESULTCODE = 1;
private Uri mCameraURI;
@Override
public void setupWorkplace() {
WebViewClient webclient = new WebViewClient();
ctWebView = (WebView) findViewById(R.id.ctWebView);
ctWebView.getSettings().setAppCacheEnabled(true);
ctWebView.getSettings().setJavaScriptEnabled(true);
ctWebView.getSettings().setLoadWithOverviewMode(true);
ctWebView.getSettings().setAllowFileAccess(true);
ctWebView.setWebViewClient(webclient);
ctWebView.loadUrl(ConstantsStrings.WORKPLACE_URL);
}
@Override
public void setupGA() {
// Google Analytics
appGA = (MyApplicaton) getApplication();
trackerGA = appGA.getDefaultTracker();
sendGA(ConstantsStrings.WORKPLACE_GA_IN);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_workplace);
toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
workplacePresenter = new WorkplacePresenter();
workplacePresenter.attachView(this);
workplacePresenter.checkPermissions(WorkplaceActivity.this);
ActionBar actionBar = this.getSupportActionBar();
if (actionBar != null) {
actionBar.setDisplayHomeAsUpEnabled(false);
actionBar.setDisplayShowHomeEnabled(false);
actionBar.setHomeAsUpIndicator(R.drawable.ic_arrow_left);
actionBar.setTitle("");
// add back button
ImageButton back_button = (ImageButton) findViewById(R.id.back_button);
back_button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (ctWebView.canGoBack()) {
ctWebView.goBack();
}
Log.d("WORKPLACE", "click back");
}
});
// add close button
ImageButton close_button = (ImageButton) findViewById(R.id.close_button);
close_button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
finish();
Log.d("WORKPLACE", "click close");
}
});
}
setupGA();
setupWorkplace();
ctWebView.setWebChromeClient(new WebChromeClient() {
@Override
public boolean onShowFileChooser(WebView webView, ValueCallback<Uri[]> filePathCallback, FileChooserParams fileChooserParams) {
WorkplaceActivity.this.openFileChooser(filePathCallback);
return true;
}
});
}
@Override
public void onBackPressed() {
super.onBackPressed();
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
if (requestCode == FILECHOOSER_RESULTCODE) {
if (mUploadMessage != null) {
Uri[] temp = new Uri[1];
if (intent != null && intent.getData() != null) {
temp[0] = intent.getData();
} else if (mCameraURI != null) {
temp[0] = mCameraURI;
}
mUploadMessage.onReceiveValue(temp);
mUploadMessage = null;
}
}
}
public static Intent newInstance(Context context) {
return new Intent(context, WorkplaceActivity.class);
}
@Override
public void onAttachedToWindow() {
super.onAttachedToWindow();
workplacePresenter.attachView(this);
}
@Override
public void onDetachedFromWindow() {
super.onDetachedFromWindow();
workplacePresenter.detachView();
}
@Override
public void showLoading() {
}
@Override
public void hideLoading() {
}
@Override
public void sendGA(String msg) {
// Google Analytics
trackerGA = appGA.getDefaultTracker();
trackerGA.setScreenName(msg);
trackerGA.send(new HitBuilders.ScreenViewBuilder().build());
}
private void openFileChooser(ValueCallback<Uri[]> uploadMsg) {
mUploadMessage = uploadMsg;
try {
Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
ActivityCompat.requestPermissions(WorkplaceActivity.this, new String[]{Manifest.permission.CAMERA}, FILECHOOSER_RESULTCODE);
ActivityCompat.requestPermissions(WorkplaceActivity.this, new String[]{Manifest.permission_group.STORAGE}, 6);
ActivityCompat.requestPermissions(WorkplaceActivity.this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 5);
File storageDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);
File cameraDir = new File(storageDir.getAbsolutePath() + File.separator + "browser-photos");
cameraDir.mkdirs();
String mCameraFilePath = cameraDir.getAbsolutePath() + File.separator + ".jpg";
mCameraURI = Uri.fromFile(new File(mCameraFilePath));
takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, mCameraURI);
Intent contentSelectionIntent = new Intent(Intent.ACTION_GET_CONTENT);
contentSelectionIntent.addCategory(Intent.CATEGORY_OPENABLE);
contentSelectionIntent.setType("image/*");
Intent chooserIntent = new Intent(Intent.ACTION_CHOOSER);
chooserIntent.putExtra(Intent.EXTRA_INTENT, contentSelectionIntent);
chooserIntent.putExtra(Intent.EXTRA_TITLE, "Image Chooser");
chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, new Parcelable[]{takePictureIntent});
startActivityForResult(chooserIntent, FILECHOOSER_RESULTCODE);
} catch (Exception e) {
Toast.makeText(getBaseContext(), "Camera Exception:" + e, Toast.LENGTH_LONG);
}
}
当我尝试从相机上传图像时,我的手机会保存图像,但它不会出现在上传屏幕上。
【问题讨论】: