【问题标题】:Android input type file in native packaged application本机打包应用程序中的 Android 输入类型文件
【发布时间】:2014-04-05 21:28:45
【问题描述】:

我正在使用 Sencha Touch,但这是一个更普遍的问题。

我已经实现了一个带有简单 html 输入类型文件的图像文件上传示例。

从 Android 浏览器(如 Chrome)运行示例,当我按下选择文件按钮时,相机会显示为获取文件的选项。但是,如果我通过Phonegap打包应用程序,当我按下按钮时,只能选择文件管理器和类似的应用程序。

我也尝试过输入类型文件,接受 image/* 并捕获相机,但没有成功。

呈现页面的 Android WebView 是否可能无法像 Chrome 视图那样功能齐全?

我是否有其他标准选项来选择使用 Phonegap 的相机?

谢谢!

【问题讨论】:

  • 不要使用输入类型文件,它在 android 4.4 stackoverflow.com/questions/19882331/… 上坏了
  • 嘿@gonzalomelov,只是想知道您是否发现了有关您的情况的任何有用信息?我与您的设置完全相同(ST2 + phonegap)并且有完全相同的问题。我在这里找到的大多数答案都是无关紧要的,因为人们要么建议“使用 2 个按钮”或“”之类的东西。我只是想知道,我是否有可能遗漏了一个简单的设置/配置,或者我将不得不重新设计我的捕获工作流程。
  • @JChow,我搜索了很多都没有成功。我们开发的最终解决方案包括两个按钮和 Phonegap 相机插件。如果 Android 允许像 iOS 这样的打包应用程序的输入标签,那就太好了。干杯!
  • 感谢您的回复。我确实在发表评论后不久就放弃了挖掘。我使用了一个按钮,然后弹出并要求用户拍照或选择照片。据我所知,很多原生应用程序确实做到了这一点,所以我认为这对我来说很好,只要我可以在我的主布局中保持一键式设计。

标签: android ajax cordova file-io


【解决方案1】:

我很惊讶PhoneGap 没有公开一个可以处理这个问题的函数——他们当然会要求所有的许可!

如果您正在创建网页,您当然可以定义一个 js 接口,该接口将依次执行 startActivityForResult,如下所示:

today.setToNow();
    PackageManager pm = getPackageManager();
//  if (locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER))
//  {
        Intent i = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
        i.putExtra(MediaStore.EXTRA_OUTPUT, FileContentProvider.CONTENT_URI);       
        if (pm.hasSystemFeature(PackageManager.FEATURE_CAMERA))
            i.putExtra("camerasensortype", 1); // call the rear camera          
        else if (pm.hasSystemFeature(PackageManager.FEATURE_CAMERA_FRONT))
            i.putExtra("camerasensortype", 2); // call the front camera         
        else Toast.makeText(getBaseContext(), "Camera is not available", Toast.LENGTH_LONG).show();
        i.putExtra("autofocus", true);
        i.putExtra("fullScreen", false);
        i.putExtra("showActionIcons", false);
        startActivityForResult(i, CAMERA_REQUEST);  
//  }       
    else askForGPS(this);

然后

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
    super.onActivityResult(requestCode, resultCode, data);
    if (resultCode == RESULT_OK && requestCode == CAMERA_REQUEST)
    {...} 

甚至不需要实现接口 =]

那么你就有了你的照片;设置一个 ContentProvider 并指向你的上传者。 =]

【讨论】:

    猜你喜欢
    • 2019-09-08
    • 2012-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-05
    • 1970-01-01
    • 2017-03-23
    相关资源
    最近更新 更多