强力关闭RingtonePicker

问题描述:

我的代码拒绝返回正确的requestCode,所以我即兴创作了一下。它总是返回-1。强力关闭RingtonePicker

if(v.getId() == R.id.imageButton9) 
    { 
     request = 888; 
     Intent wpIntent = new Intent(); 
     wpIntent.setType("image/*"); 
     wpIntent.setAction(Intent.ACTION_GET_CONTENT); 
     startActivityForResult(Intent.createChooser(wpIntent, "Select Picture"), SELECT_PICTURE); 
    } 

    else if(v.getId() == R.id.imageButton10) 
    { 
     String uri = null; 
     request = 999; 
     rtIntent = new Intent(RingtoneManager.ACTION_RINGTONE_PICKER); 
     rtIntent.putExtra(RingtoneManager.EXTRA_RINGTONE_TYPE, RingtoneManager.TYPE_RINGTONE); 
     rtIntent.putExtra(RingtoneManager.EXTRA_RINGTONE_TITLE, "Select Tone"); 
     if(uri != null) 
     { 
      rtIntent.putExtra(RingtoneManager.EXTRA_RINGTONE_EXISTING_URI, Uri.parse(uri)); 
     } 
     else 
     { 
      rtIntent.putExtra(RingtoneManager.EXTRA_RINGTONE_EXISTING_URI, (Uri)null); 
     }  
     this.startActivityForResult(rtIntent, SELECT_TONE); 
    } 

我已经声明,在我的代码的开头两个变量:

protected static final int SELECT_PICTURE = 888; 
protected static final int SELECT_TONE = 999; 

下面是onActivityResult:

public void onActivityResult(int resultCode, int requestCode, Intent data) 
{ 
    Toast.makeText(this, "onActivityResult: "+requestCode, Toast.LENGTH_SHORT).show(); 

    if(request == 888) 
    { 
     Toast.makeText(this, "Picture Selection", Toast.LENGTH_SHORT).show(); 
     Uri selectedImage = Uri.parse(data.getDataString()); 
     wpPath = getPath(selectedImage); 
     Toast.makeText(this, "WP Path: "+wpPath, Toast.LENGTH_SHORT).show(); 
     request = 0; 
    } 

    else if(request == 999) 
    { 
     Toast.makeText(this, "Tone Selection", Toast.LENGTH_SHORT).show(); 
     Log.i("RT Picked is: ", rtIntent.getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI).toString()); 
     Uri uri = rtIntent.getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI); 
     if (uri != null) 
     { 
      rtPath = uri.toString(); 
      Toast.makeText(this, "Ringtone Path: "+rtPath, Toast.LENGTH_SHORT).show(); 
      request = 0; 
     } 
    } 
} 

这总是强制关闭。它给出以下错误:

06-01 12:40:35.388: E/AndroidRuntime(7437): java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=999, result=-1, data=Intent { (has extras) }} to activity {com.asim.autobot/com.asim.autobot.profile}: java.lang.NullPointerException

我被卡住了。无法解决这个问题。

首先,为什么requestCode总是返回-1? 其次,为什么应用程序强制关闭rtIntent.getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI);?

编辑: 完整的logcat http://i47.tinypic.com/1zm2gww.jpg

它指向的直线是Log.i( “RT拣是:”,rtIntent.getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI)的ToString());

+0

使用开关的情况下,而不是检查按钮与if(if(v.getId()== R.id.imageButton9)) – Aerrow

+0

请发布完整的logcat。 – techiServices

+0

添加了Logcat图像。 – Asim

当你的-1一个resultCode为则曾任RESULT_OK = -1

检查以下行:

rtIntent.getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI).toString() 

你有一个参数叫做Intent data和你应该使用该变量而不是rtIntent变量。你的rtIntent变量不会被修改,所以getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI)可能会返回null。

+0

我爱你的男人,以非同性恋的方式。 非常感谢您的帮助。我已将您的答案标记为已接受。 请再次检查这个问题,因为我可能需要一些帮助设置返回的Uri作为铃声。 希望我能计算器之外您联系以寻求帮助:/ – Asim

+0

搜索的作品,太:)尝试这种解决方案:http://*.com/questions/7671637/how-to-set-ringtone-with-ringtonemanager-action-铃声选择器 – WarrenFaith

+0

我看到了...看到我的代码有点儿不错。只是我用了错误的意图大声笑 – Asim

试试这个代码,

public void onClick(View v) { 

     switch (v.getId()) { 
     case R.id.imageButton9: 
      request = 888; 
      Intent wpIntent = new Intent(); 
      wpIntent.setType("image/*"); 
      wpIntent.setAction(Intent.ACTION_GET_CONTENT); 
      startActivityForResult(Intent.createChooser(wpIntent, "Select Picture"), SELECT_PICTURE); 
     case R.id.imageButton10: 

      String uri = null; 
      request = 999; 
      rtIntent = new Intent(RingtoneManager.ACTION_RINGTONE_PICKER); 
      rtIntent.putExtra(RingtoneManager.EXTRA_RINGTONE_TYPE, RingtoneManager.TYPE_RINGTONE); 
      rtIntent.putExtra(RingtoneManager.EXTRA_RINGTONE_TITLE, "Select Tone"); 
      if(uri != null) 
       { 
        rtIntent.putExtra(RingtoneManager.EXTRA_RINGTONE_EXISTING_URI, Uri.parse(uri)); 
       } 
      else 
       { 
        rtIntent.putExtra(RingtoneManager.EXTRA_RINGTONE_EXISTING_URI, (Uri)null); 
       }  
         this.startActivityForResult(rtIntent, SELECT_TONE); 

      break; 
     default: 
      break; 
     } 

    } 


     public void onActivityResult(int resultCode, int requestCode, Intent data) 
{ 
    Toast.makeText(this, "onActivityResult: "+requestCode, Toast.LENGTH_SHORT).show(); 

    if(requestCode == SELECT_PICTURE) 
    { 
     Toast.makeText(this, "Picture Selection", Toast.LENGTH_SHORT).show(); 
     Uri selectedImage = Uri.parse(data.getDataString()); 
     wpPath = getPath(selectedImage); 
     Toast.makeText(this, "WP Path: "+wpPath, Toast.LENGTH_SHORT).show(); 
     request = 0; 
    } 

    else if(requestCode == SELECT_TONE) 
    { 
     Toast.makeText(this, "Tone Selection", Toast.LENGTH_SHORT).show(); 
     Log.i("RT Picked is: ", rtIntent.getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI).toString()); 
     Uri uri = rtIntent.getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI); 
     if (uri != null) 
     { 
      rtPath = uri.toString(); 
      Toast.makeText(this, "Ringtone Path: "+rtPath, Toast.LENGTH_SHORT).show(); 
      request = 0; 
     } 
    } 
} 
+0

试过。不工作。 当我点击选择铃声时,activityresult返回-1,因此什么也没有。当我点击选择壁纸时,它首先打开RingtoneChooser(无论是使用Android系统还是GoSMS)。当我按下后,它会打开WallpaperChooser(图库,根目录等)。 – Asim