首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Delphi中使用RingtoneManager.setType

如何在Delphi中使用RingtoneManager.setType
EN

Stack Overflow用户
提问于 2018-07-05 01:23:39
回答 1查看 311关注 0票数 0

在东京Delphi10.2中使用Androidapi.JNI.Media

我正在尝试列出可用的铃声,并播放与当前默认铃声不同的铃声。

初始化JAudioManagerJRingtoneManager似乎没问题,因为我可以播放默认的铃声。

但是,当我尝试使用RingtoneManager来设置Type或获取Cursor时,程序以系统弹出窗口终止,并显示“应用程序(名称)已中断-重新启动应用程序”。

代码语言:javascript
复制
procedure TAudioPlayBackForm.Button2Click(Sender: TObject);
var
  AudioObj: JObject;
  AudioMgr: JAudioManager;
  RingtoneMgr: JRingtoneManager; 
  aUri: Jnet_Uri;
  cur: JCursor;
  ringt: JRingtone;
begin
  AudioObj := TAndroidHelper.Activity.getSystemService(TJContext.JavaClass.AUDIO_SERVICE );
  RingtoneMgr := TJRingtoneManager.Wrap((AudioObj as ILocalObject).GetObjectID);
  Log.d('TJRingtoneManager wrap ok');

  aUri := TJRingtoneManager.JavaClass.getActualDefaultRingtoneUri(SharedActivityContext, TJRingtoneManager.JavaClass.TYPE_NOTIFICATION);
  Log.d('getActualDefaultRingtoneUri = '+ JStringToString(aUri.toString) );                                                        

  ringt := TJRingtoneManager.JavaClass.getRingtone(SharedActivityContext, aUri);
  Log.d('getRingtone uri ok = '+ JStringToString( ringt.getTitle(SharedActivityContext) ));

  ringt.play;  // OK !

  RingtoneMgr.setType( 4 );   // <-- CRASH !
  Log.d('RingtoneMgr setType ok');

  cur := RingtoneMgr.getCursor;   // <-- CRASH !
  Log.d('RingtoneMgr getCursor ok = '+ intToStr(cur.getColumnCount));
end;

有什么想法吗?我是不是忘了初始化什么东西?

我使用this documentation作为参考。

EN

回答 1

Stack Overflow用户

发布于 2018-07-05 04:24:34

您创建的RingtoneManager实例不正确。它应该是:

代码语言:javascript
复制
// Forget about obtaining AudioObj - it's not relevant
RingtoneMgr := TJRingtoneManager.JavaClass.init(TAndroidHelper.Activity);

这需要Androidapi.Helpers单元

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51178531

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档