我正在尝试通过ACTION_SEND意图将文件上传到webview应用。如果他们选择在应用程序内部使用openFileChooser上传文件,我已经有了它的工作,但是当他们点击文件或图库应用程序中的共享时我需要它才能工作。所以,我非常需要BYPASS openFileChooser,因为已经选择了一个文件并且它的Uri在我的Intent中,我只需要实际上传它。我想躲开openFileChooser的方式,但我不知道该怎么做。
我认为我最大的障碍是不知道如何获取/创建/忽略ValueCallback uploadMsg,除非当然有一种方法可以完全避免这种情况。
这是我的意图和openFileChooser,但我需要BYPASS收到意图,所以我有
intent = getActivity().getIntent();
if(intent != null){
intentAction = intent.getAction();
if(!TextUtils.isEmpty(intentAction)){
if(intentAction.equalsIgnoreCase(Intent.ACTION_SEND)){
if(intent.getExtras()!=null){
//get file from extra and piggyback off upload handler used in openFileChooser
}
}
}
和我的openFileChooser工作正常,有用户输入,但我需要能够在收到意图时没有用户输入这样做
WebChromeClient chromeClient = new WebChromeClient() {
@Override
public void openFileChooser(ValueCallback<Uri> uploadMsg, String acceptType,
String capture) {
mUploadHandler = new UploadHandler(WebFragment.this);
mUploadHandler.openFileChooser(uploadMsg, acceptType, capture);
}
所以我需要以某种方式获得一个有效的ValueCallback Uri来设置为用于创建openFileChooser的上传消息,这样当我在这里执行mUploadMessage.onReceiveValue(结果)(取自google的webkit包)时
void onResult(int resultCode, Intent intent) {
if (resultCode == Activity.RESULT_CANCELED && mCaughtActivityNotFoundException) {
mCaughtActivityNotFoundException = false;
return;
}
Uri result = intent == null || resultCode != Activity.RESULT_OK ? null
: intent.getData();
if (result == null && intent == null && resultCode == Activity.RESULT_OK) {
File cameraFile = new File(mCameraFilePath);
if (cameraFile.exists()) {
result = Uri.fromFile(cameraFile);
mController.getActivity().sendBroadcast(
new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, result));
}
}
mUploadMessage.onReceiveValue(result);
mHandled = true;
mCaughtActivityNotFoundException = false;
}
所以,长话短说,我需要一个有效的ValueCallback<Uri>
,以便捎带Android / webkit的onReceiveValue(结果)/ WebView的上传处理程序,我不知道如何无需用户输入即可从设备上打开上传。
答案 0 :(得分:0)
正如您对问题的第一条评论所说,更多代码可以帮助诊断这一点,但接收ACTION_SEND
意图的一般方法如下:
在您的活动的Android Manifest中将ACTION_SEND
配置为Intent Filter。
<application>
...
<activity>
...
<intent-filter>
<action android:name="android.intent.action.SEND" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
如果您只想接受某些类型的文件,可以选择设置多个<data android:mimeType=XXX>
元素。
然后在您的活动中,您可以使用getIntent()
和Intent.getData()
方法来处理传入的发送意图。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Intent intent = getIntent();
Uri sharedFile = intent.getData();
// We can now use the URI of the file / item in
// the WebView. Probably want to do this after onCreate
// so that the WebView has fully initialised.
}