【问题标题】:Android: save sound as ringtone and notificationAndroid:将声音另存为铃声和通知
【发布时间】:2011-04-24 12:24:25
【问题描述】:

我正在从我的应用程序中保存一个声音以用作铃声或通知声音。这是我的部分代码,取自this页面:

ContentValues values = new ContentValues();
values.put(MediaStore.MediaColumns.DATA, k.getAbsolutePath());
values.put(MediaStore.MediaColumns.TITLE, soundName);
values.put(MediaStore.MediaColumns.MIME_TYPE, "audio/ogg");
values.put(MediaStore.Audio.Media.ARTIST, "artist");
values.put(MediaStore.Audio.Media.IS_RINGTONE, true);
values.put(MediaStore.Audio.Media.IS_NOTIFICATION, true);
values.put(MediaStore.Audio.Media.IS_ALARM, true);
values.put(MediaStore.Audio.Media.IS_MUSIC, false);

Uri uri = MediaStore.Audio.Media.getContentUriForPath(k.getAbsolutePath());
this.getContentResolver().insert(uri, values);

我的理解是声音将被保存以及铃声,通知声音和警报,因为标志都设置为“true”。至少在模拟器上这确实有效,但在实际设备上,声音只显示在铃声列表中,我不知道为什么。

编辑:我试图进一步调查:删除带有“IS_RINGTONE”的行不会改变任何东西(如果一次只能使用一个标志),声音不会出现在列表中通知声音。

感谢任何帮助。

亲切的问候,Select0r

【问题讨论】:

  • 有谁知道这在 FLASH CS5.5 上是否可行????我在那里开发了一个音板,我真的需要紧急添加铃声。

标签: android audio notifications ringtone


【解决方案1】:

我尝试了解决这个问题的方法,这是我到目前为止提出的解决方案:

在模拟器上路径无关紧要,声音会出现在铃声和通知列表中。

在手机上,如果文件保存到/media/audio/ringtones/media/audio/,声音会显示在铃声列表中,但不是作为通知。
如果我使用路径/media/audio/notifications,声音最终会出现在通知列表(!)中,但不再在铃声中。

所以看来我必须保存声音 两次 才能将它放入两个列表中? (但为什么在模拟器上保存一次?)

如果有另一种方法可以将声音放入两个列表(甚至三个列表,还有警报音,我只是懒得玩它们)只保存一次,请告诉我。 (现在我的解决方法是一个对话框,让用户选择是将声音保存为铃声还是通知。)

【讨论】:

  • 我的音板也遇到了这个问题。据我所知,您必须多次保存。我刚刚使用了一个 AlertDialog,它提供了保存位置的选项,这改变了路径。但既然你想把它保存到两个列表中,我认为你必须保存两次。
  • 经过测试和研究,我相信这实际上是要走的路,感谢您的确认。我想我会坚持我的解决方法,并询问用户将文件保存在哪里,而不是只保存两次声音(正如你提到的那样)。尽管这不是我的意图,但我想这是更好的可用性。
【解决方案2】:

如果您尝试从 MediaStore.Audio.Media 更改为 AudioColumns 是否有帮助?像这样:

values.put(AudioColumns.ARTIST, "artist");
values.put(AudioColumns.IS_RINGTONE, true);
values.put(AudioColumns.IS_NOTIFICATION, true);
values.put(AudioColumns.IS_ALARM, true);
values.put(AudioColumns.IS_MUSIC, false);

参考并没有说 MediaStore.Audio.Media 已被弃用,但我确实认为现在使用 AudioColumns。我在我的应用程序中使用它,它似乎工作。

【讨论】:

  • 好点,谢谢。我会试试看,如果有效,我会回复你。
  • 我尝试使用 AudioColumns 但无法让它在我的设备上保存铃声或通知声音 - 所以 MediaStore.Audio.Media 似乎是要走的路。
【解决方案3】:

您必须查看 Android 中的媒体播放器 API 即android.media.MediaPlayer; android.media.MediaPlayer.OnCompletionListener 。这里是: http://developer.android.com/reference/android/media/package-summary.... 这就是您在触发点击侦听器时播放声音的方式:

     private OnClickListener btnDontBeStupidListener = new 
OnClickListener() 
            { 
                public void onClick(View v) 
                { 
                  //Toast.makeText(getBaseContext(), "Don't Be Stupid audio file 
is being played", Toast.LENGTH_SHORT).show(); 
                  final MediaPlayer mp = MediaPlayer.create(iMEvil.this, 
R.raw.stupid); 
                  //mp.start(); 
                  try { 
                          mp.start(); 
                          //mp.release(); 
                  }catch(NullPointerException e){ 
                        Log.v("MP error", e.toString()); 
                  } 
                  mp.setOnCompletionListener(new OnCompletionListener(){ 
                      // @Override 
                      public void onCompletion(MediaPlayer arg0) { 
                         mp.release(); 
                      } 
                 }); 
                } 
            }; 

另外,您是否尝试过在播放时录制声音?试试看它是否有效。

【讨论】:

  • 尝试播放声音并且我录制声音。还有 no ClickListener 参与。你甚至读过这个问题吗?
猜你喜欢
  • 1970-01-01
  • 2014-01-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多