我遇到了这个奇怪的问题,我已经检查了SO并且在网上发现什么都没有,我的代码完全没有问题,我想从片段中选择一个音频文件,这是我的代码:
public void onClick(View arg0)
{
switch (arg0.getId())
{
case R.id.upload_btn_select_file:
Intent musicIntent = new Intent(RingtoneManager.ACTION_RINGTONE_PICKER);
//musicIntent.putExtra(RingtoneManager.EXTRA_RINGTONE_TYPE, RingtoneManager.TYPE_NOTIFICATION);
startActivityForResult(musicIntent, REQ_MUSIC);
break;
}
}
和
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data)
{
super.onActivityResult(requestCode, resultCode, data);
Log.v("activity result" , "first enter");
//handle music
if( requestCode == REQ_MUSIC && resultCode == Activity.RESULT_OK )
{
Log.v("activity result" , "ok");
Log.v("data" , data.getData()+"");
}
}
现在,如果我选择一首带有Android默认选择器的歌曲,我会
03-10 17:55:40.160: V/activity result(32644): first enter
03-10 17:55:40.160: V/activity result(32644): ok
03-10 17:55:40.160: V/data(32644): null
但如果我选择与es explorer选择器相同的歌曲,我会
03-10 17:48:46.400: V/activity result(32644): first enter
03-10 17:48:46.400: V/activity result(32644): ok
03-10 17:48:46.400: V/data(32644): content://com.estrongs.files/mnt/sdcard/music/01%20-%20First%20Strike%20Is%20Deadly.mp3
我在xperia-neo-v上使用的是android 4.0,我可以在代码中做些什么来解决这个问题?或者它只是索尼的构建?
答案 0 :(得分:2)
我已经对收到的意图添加了检查,发现它有密钥
Iterator<String> keyset= data.getExtras().keySet().iterator();
while( keyset.hasNext())
Log.v("key" , keyset.next());
然后抓住了包含uri的额外内容
Log.v("uri" , data.getExtras().get(RingtoneManager.EXTRA_RINGTONE_PICKED_URI)+"");
答案 1 :(得分:1)
很可能默认选择器没有在getData中返回结果。 (你不能假设所有的选择器都会以相同的方式返回数据)
也许它会将结果返回到数据对象中的额外内容中。
查看额外内容。即data.getExtras()
答案 2 :(得分:0)
无法保证您确实从应用程序执行的意图中获取数据。
我试图从多个应用程序(Facebook,Twitter,Instagram)获得结果,结果是每次:没什么。
我认为这甚至不是默认的Android铃声选择器,索尼用自定义的意图取代AFAIR的Android默认设置。