【问题标题】:How to get current ringtone in Android?如何在 Android 中获取当前铃声?
【发布时间】:2014-04-25 12:57:52
【问题描述】:

我找到了很多如何获取默认铃声的示例。类似的东西:

Uri alert = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_RINGTONE);
        Ringtone ringtone = RingtoneManager.getRingtone(getApplicationContext(),  alert);
         ringtone.setStreamType(AudioManager.STREAM_RING);
         ringtone.play();

但我想获取用户设置的实际当前铃声。

【问题讨论】:

    标签: android uri ringtone android-audiomanager


    【解决方案1】:

    我也在为这个问题苦苦挣扎,所以解决方案是:

    Uri defaultRingtoneUri = RingtoneManager.getActualDefaultRingtoneUri(getActivity().getApplicationContext(), RingtoneManager.TYPE_RINGTONE);
    Ringtone defaultRingtone = RingtoneManager.getRingtone(getActivity(), defaultRingtoneUri);
    

    【讨论】:

    • getActivity() 是什么?
    • 当前Activity实例,在Fragments中使用,如果您在Activity中,请改用YourActivity.this
    【解决方案2】:

    这是 dgabor 答案的扩展。 只需添加defaultRingtone.play(); 即可播放铃声。

    Uri defaultRintoneUri = RingtoneManager.getActualDefaultRingtoneUri(getApplicationContext(), RingtoneManager.TYPE_RINGTONE);
    Ringtone defaultRingtone = RingtoneManager.getRingtone(getApplicationContext(), defaultRintoneUri);
    defaultRingtone.play();
    

    【讨论】:

      【解决方案3】:

      我也搜索了很多你的问题,我也有。 终于从这个本身得到了解决方案。

      在按钮中使用以下代码来获取铃声意图。

      public void pickRingtone(View view) {
              // TODO Auto-generated method.stub
      
              Intent intent = new Intent(RingtoneManager.ACTION_RINGTONE_PICKER);
              intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TYPE, RingtoneManager.TYPE_RINGTONE);
              intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TITLE, "Select Ringtone");
      
          // for existing ringtone
              Uri urie = RingtoneManager.getActualDefaultRingtoneUri(
                      getApplicationContext(), RingtoneManager.TYPE_RINGTONE);
              intent.putExtra(RingtoneManager.EXTRA_RINGTONE_EXISTING_URI, urie);
      
          startActivityForResult(intent, 5);
      }
      

      【讨论】:

      • 这仍然没有回答我的问题。我只是想为当前选择的铃声(由用户)获取一个 URI。我不需要任何铃声选择器或类似的东西。我只需要获取一个 uri 并在需要时播放它。
      【解决方案4】:

      这是解决方案。

      内部onActivityResult

      Uri uri = data.getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI);  
      Ringtone r=RingtoneManager.getRingtone(this, uri); 
      String ringToneName=r.getTitle(this);
      Toast.makeText(getApplicationContext(), "Ringtone Name : "+ringToneName,Toast.LENGTH_SHORT).show();
      

      但它会在模拟器中显示exception,因为模拟器中没有铃声,所以在手机中执行此操作

      【讨论】:

      • 谢谢!所以我假设数据是 Intent.. 因为我试图在 BroadcastReceiver 的 onReceive 方法中执行它,该方法包含 Context 和 Intent 作为传递的参数.. 今天晚些时候会尝试。再次感谢。
      • 试图让它在 Activity 类或 BroadcastReceiver 中工作但没有成功。 r.getTitle(this) 返回“未知铃声”,如果尝试播放铃声,它会崩溃。
      • 如果也尝试过,但如果我返回我的活动,我会收到错误并且应用程序会中断。那我做错了什么?
      【解决方案5】:

      尝试:

      Uri alert = RingtoneManager.getDefaultUri(RingtoneManager.EXTRA_RINGTONE_EXISTING_URI);
      

      【讨论】:

      • 这行不通,因为 RingtoneManager.getDefaultUri 只接受 INT 参数,而 RingtoneManager.EXTRA_RINGTONE_EXISTING_URI 是一个字符串。
      【解决方案6】:

      试试这个:

      uri default_ringtone_uri = Settings.System.DeFAULT_RINGTONE_URI
      
      Ringtone ringtone = RingtoneManager.getRingtone(context, uri).play();
      

      【讨论】:

      • 虽然此代码可能会回答问题,但提供有关此代码为何和/或如何回答问题的额外上下文可提高其长期价值。
      【解决方案7】:

      Alexander The Great 的回答是正确的。但是,我简化了它。

      Uri currentRingtonUri = RingtoneManager.getActualDefaultRingtoneUri(getApplicationContext(), RingtoneManager.TYPE_RINGTONE);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-10-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-04-09
        • 1970-01-01
        相关资源
        最近更新 更多