2015-11-01 108 views
0

我正在使用常规boiler-plate代码来显示android上的File Picker对话框。获取文件路径后,我使用aQuery将该文件上传到我的服务器。 但是,该代码只适用于我的旧版Android 4.1.2上运行的三星手机,但不能在任何其他设备上运行。我使用许多设备对其进行了测试,但它仅适用于带有果冻豆的三星设备。Android的FilePicker对话框只适用于某些设备

​​

的onActivityResult代码:

protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if (data != null) { 
     fPath = data.getDataString(); 
     File file = new File(fPath.substring(7)); 
     params.put("file" + noFilesAttached, file); 
     noFilesAttached = noFilesAttached + 1; 
     path.setText(noFilesAttached + " files attached "); 
     upload.setText("Upload (" + noFilesAttached + ")"); 
     upload.setVisibility(View.VISIBLE); 
     isUploaded = false; 
    } 
    super.onActivityResult(requestCode, resultCode, data); 
} 

我试图编辑fPath.substring(7)fpath没有成功,我不希望使用任何三阶党的图书馆。

在此先感谢。

+0

当其他电话:!getPackageManager()resolveActivity(sIntent,0)=空返回假的? –

+0

在其他手机中返回false –

+0

在其他手机中,您是否可以在onActivityResult中获得结果? –

回答

0

Data.getData() return a uri; U需要一个文件路径; 尝试寻找方法来改造uri到文件路径: 可能:

public static String getRealFilePath(final Context context, final Uri uri) { 
    if (null == uri) return null; 
    final String scheme = uri.getScheme(); 
    String data = null; 
    if (scheme == null) 
     data = uri.getPath(); 
    else if (ContentResolver.SCHEME_FILE.equals(scheme)) { 
     data = uri.getPath(); 
    } else if (ContentResolver.SCHEME_CONTENT.equals(scheme)) { 
     Cursor cursor = context.getContentResolver().query(uri, new String[] { ImageColumns.DATA }, null, null, null); 
     if (null != cursor) { 
      if (cursor.moveToFirst()) { 
       int index = cursor.getColumnIndex(ImageColumns.DATA); 
       if (index > -1) { 
        data = cursor.getString(index); 
       } 
      } 
      cursor.close(); 
     } 
    } 
    return data; 
} 
+0

此代码似乎不适用于Android 5.1.1。我正在寻找其他选项,但感谢您指点我正确的方向。 –

0

尝试使用此library

这个库可能会解决您的要求。

+0

它支持gradle吗? –

相关问题