在我的应用程序中,用户将选择应用程序随后处理的音频文件.问题是,为了让应用程序按照我想要的方式处理音频文件,我需要URI为文件格式.当我使用Android的原生音乐播放器在应用程序中浏览音频文件时,URI是一个内容URI,如下所示:
content://media/external/audio/media/710
Run Code Online (Sandbox Code Playgroud)
但是,使用流行的文件管理器应用程序Astro,我得到以下内容:
file:///sdcard/media/audio/ringtones/GetupGetOut.mp3
Run Code Online (Sandbox Code Playgroud)
后者对我来说更容易使用,但当然我希望应用程序具有用户选择的音频文件的功能,而不管他们用来浏览他们的集合的程序.所以我的问题是,有没有办法将content://样式URI转换为file://URI?否则,你会建议我解决这个问题?以下是调用选择器的代码,供参考:
Intent ringIntent = new Intent();
ringIntent.setType("audio/mp3");
ringIntent.setAction(Intent.ACTION_GET_CONTENT);
ringIntent.addCategory(Intent.CATEGORY_OPENABLE);
startActivityForResult(Intent.createChooser(ringIntent, "Select Ringtone"), SELECT_RINGTONE);
Run Code Online (Sandbox Code Playgroud)
我使用内容URI执行以下操作:
m_ringerPath = m_ringtoneUri.getPath();
File file = new File(m_ringerPath);
Run Code Online (Sandbox Code Playgroud)
然后用所述文件做一些FileInputStream.
我一直收到这个错误.
无效的URI:无法确定URI的格式.
我的代码是:
Uri uri = new Uri(slct.Text);
if (DeleteFileOnServer(uri))
{
nn.BalloonTipText = slct.Text + " has been deleted.";
nn.ShowBalloonTip(30);
}
Run Code Online (Sandbox Code Playgroud)
更新: slct.Text中的内容是ftp.jt-software.net/style.css.
是什么赋予了?那怎么不是有效的URI格式?这是纯文本.
是否可以转换Uri为String反之,反之亦然?因为我希望将Uri转换成String的内容传递给另一个活动intent.putextra(),如果不可能,任何人都可以建议我如何将选定内容传递Uri到另一个活动中?
我正在尝试将URI-Object传递给我的Intent,以便在另一个活动中使用该URI ...
如何传递URI?
private Uri imageUri;
....
Intent intent = new Intent(this, GoogleActivity.class);
intent.putExtra("imageUri", imageUri);
startActivity(intent);
this.finish();
Run Code Online (Sandbox Code Playgroud)
如何在我的其他活动中使用此URI?
imageUri = extras.getString("imageUri"); // I know thats wrong ...
Run Code Online (Sandbox Code Playgroud)
感谢你们
我需要打开一个意图来查看图像,如下所示:
Intent intent = new Intent(Intent.ACTION_VIEW);
Uri uri = Uri.parse("@drawable/sample_1.jpg");
intent.setData(uri);
startActivity(intent);
Run Code Online (Sandbox Code Playgroud)
问题是这Uri uri = Uri.parse("@drawable/sample_1.jpg");是不正确的.
我一直在谷歌搜索来回阅读RFC和SO试图解决这个问题,但我仍然没有得到杰克.
所以我想我们只是投票给"最好的"答案就是这样,或者?
基本上它归结为这个.
3.4.查询组件
查询组件是要由资源解释的信息字符串.
query = *uric在查询组件中,保留字符";","/","?",":","@","&","=","+",","和"$".
让我感到困惑的第一件事就是*uric就是这样定义的
uric = reserved | unreserved | escaped
reserved = ";" | "/" | "?" | ":" | "@" | "&" | "=" | "+" | "$" | ","
然而,有些段落澄清了这一点
上面的"保留"语法类指的是URI中允许的那些字符,但在通用URI语法的特定组件中可能不允许这些字符; 它们用作第3节中描述的组件的分隔符.
"保留"集中的字符不会在所有上下文中保留.实际上在任何给定URI组件中保留的字符集由该组件定义.通常,如果URI的语义在其转义为US-ASCII编码时被替换,则保留字符.
最后一段摘录感觉有些倒退,但它清楚地说明保留的字符集取决于上下文.然而,3.4声明所有保留字符都在查询组件中保留,但是,这里唯一会改变语义的是逃避问号(?),因为URI没有定义查询字符串的概念.
在这一点上,我完全放弃了RFC,但发现RFC 1738特别有趣.
HTTP URL采用以下形式:
http://<host>:<port>/<path>?<searchpart>在<path>和<searchpart>组件中,"/",";","?" 保留.可以在HTTP内使用"/"字符来指定分层结构.
我至少对RFC 1738取代RFC 2396的HTTP URL进行了解释.因为URI查询没有查询字符串的概念,所以对reserved的解释实际上并不允许我定义查询字符串,因为我习惯了现在做.
当我想将一个数字列表与另一个资源的请求一起传递时,这一切都开始了.我没有想太多,只是将它作为逗号分隔值传递给它.令我惊讶的是,逗号被逃脱了.page.html?q=1,2,3编码的查询变成了page.html?q=1%2C2%2C3它可以工作,但它很难看,并没有想到它.那是我开始浏览RFC的时候.
我的第一个问题很简单,编码逗号是否真的有必要?
根据RFC 2396,我的答案是:是的,根据RFC 1738:没有
后来我找到了有关请求之间传递列表的相关帖子.csv方法被认为是坏的.这显示出来了(之前没见过).
page.html?q=1;q=2;q=3
Run Code Online (Sandbox Code Playgroud)
我的第二个问题,这是一个有效的URL吗?
根据RFC 2396,我的回答是:不,根据RFC 1738:否(;保留)
我没有任何关于传递csv的问题,只要它的数字,但是你确实遇到了如果其他东西突然需要逗号来回来回编码和解码值的风险.无论如何,我尝试使用ASP.NET的分号查询字符串,结果不是我所期望的.
Default.aspx?a=1;a=2&b=1&a=3
Request.QueryString["a"] = "1;a=2,3"
Request.QueryString["b"] = "1"
Run Code Online (Sandbox Code Playgroud)
我没有看到这与csv方法有很大不同,因为当我要求"a"时,我得到一个带逗号的字符串.ASP.NET肯定不是一个参考实现,但它还没有让我失望. …
最近我看到像这样工作的代码块:
<script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
Run Code Online (Sandbox Code Playgroud)
根据RFC 2396(URI语法)和RFC 2616(HTTP 1.1),这些以两个斜杠开头的URI是有效的,但不幸的是,RFC并没有真正解释它们.
任何人都可以指向一个解释浏览器将如何/应该/如何处理这些URI的资源?
查询参数:http://example.com/apples?order=random&color=blue
矩阵参数:http://example.com/apples;order=random;color=blue
http://example.com/apples;order=random;color=blue/2006/archive您可以在此处阅读有关矩阵参数的更多信息:http://www.w3.org/DesignIssues/MatrixURIs.html
我想在浏览器端构建一个相对于页面URI的WebSocket URI.比方说,在我的情况下转换HTTP URI就像
http://example.com:8000/path
https://example.com:8000/path
Run Code Online (Sandbox Code Playgroud)
至
ws://example.com:8000/path/to/ws
wss://example.com:8000/path/to/ws
Run Code Online (Sandbox Code Playgroud)
我目前正在做的是用"ws"替换前4个字母"http",并将"/ to/ws"附加到它上面.那有更好的方法吗?
我想从URI获取完整的文件路径.URI不是图像,但它是一个音乐文件,但如果我像MediaStore解决方案一样,如果应用程序用户选择例如Astro作为浏览器而不是音乐播放器,它将无法工作.我该如何解决这个问题?