【问题标题】:Get custom ringtone incoming call of Android获取Android的自定义铃声来电
【发布时间】:2016-12-10 04:33:56
【问题描述】:

我可以使用下面的代码来获取当前的来电铃声

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

但我想获得由其他应用程序设置的自定义铃声。 我怎样才能得到它?

【问题讨论】:

  • 我认为您正在寻找当前铃声的路径,但不是在电话响铃的时候。如果我错了,请纠正我。
  • 谢谢@Shubham,但我还是不明白。让我举个例子: - 我下载一个应用程序可以设置来电铃声 - 然后我希望我的应用程序可以获取那个铃声 uri 或文件路径。
  • Uri defaultRintoneUri = RingtoneManager.getActualDefaultRingtoneUri( getApplicationContext(), RingtoneManager.EXTRA_RINGTONE_EXISTING_URI); 试试这个。
  • hmm 函数 getActualDefaultRingtoneUri 是 public static Uri getActualDefaultRingtoneUri(Context context, int type) 但 RingtoneManager.EXTRA_RINGTONE_EXISTING_URI 是一个字符串兄弟。
  • 对不起,我的错。 Uri defaultRingtoneUri = Uri.parse(RingtoneManager.EXTRA_RINGTONE_EXISTING_URI);

标签: android phone-call ringtone


【解决方案1】:

如果铃声仅用于该应用程序,则该铃声文件可能是私有的并且仅由该应用程序拥有。您将无法访问它,这是 Android 上的安全系统。每个应用程序基本上都以不同的 Linux 用户身份运行。

另一方面,如果为铃声系统设置了铃声,则该文件将在所有应用程序之间共享。在这种情况下,文件存储在公共文件夹中,RingtoneManager 将正确地为您提供当前铃声。

【讨论】:

    【解决方案2】:

    我找到了答案。实际上,铃声管理器会为我们提供安卓设备的默认铃声。但是如果铃声被其他应用程序改变了,我们想得到它。我们需要许可

    READ_EXTERNAL_STORAGE
    

    让我举个例子:

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

    如果没有 READ_EXTERNAL_STORAGE 权限:以上代码将返回 Android 设备的默认铃声

    但是,如果其他应用程序用“Banana.mp3”之类的歌曲更改自定义铃声(Minion - 你知道吗?哈哈)

    并且获得 READ_EXTERNAL_STORAGE 权限:您将收到完全一致的香蕉歌曲

    没有 READ_EXTERNAL_STORAGE 权限:Android 设备的默认铃声。

    【讨论】:

      【解决方案3】:

      您必须在 Media 的数据库中插入该自定义铃声。

      试试这个代码它会解决你的问题。

      File path = new File(path, "mysong.mp3"); // Path of your custom ringtone file.
      
      ContentValues values = new ContentValues();
      values.put(MediaStore.MediaColumns.DATA, path.getAbsolutePath());
      values.put(MediaStore.MediaColumns.TITLE, "My Song title"); // Title
      values.put(MediaStore.MediaColumns.SIZE, 215454); // Size of file
      values.put(MediaStore.MediaColumns.MIME_TYPE, "audio/mp3"); // File Format
      values.put(MediaStore.Audio.Media.ARTIST, "Madonna");
      values.put(MediaStore.Audio.Media.DURATION, 230);
      values.put(MediaStore.Audio.Media.IS_RINGTONE, true);
      values.put(MediaStore.Audio.Media.IS_NOTIFICATION, false);
      values.put(MediaStore.Audio.Media.IS_ALARM, false); // Default is false
      values.put(MediaStore.Audio.Media.IS_MUSIC, false); // Default is false
      
      //Insert the whole content in the Media database.
      Uri uri = MediaStore.Audio.Media.getContentUriForPath(path.getAbsolutePath());
      Uri newUri = main.getContentResolver().insert(uri, values);
      
      RingtoneManager.setActualDefaultRingtoneUri(
      myActivity,
      RingtoneManager.TYPE_RINGTONE,
      newUri);
      

      祝你好运

      【讨论】:

      • 其他应用程序插入他们的自定义铃声让我们无法获取如何?请仔细阅读我的问题,谢谢。
      猜你喜欢
      • 1970-01-01
      • 2011-05-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多