在东京Delphi10.2中使用Androidapi.JNI.Media。
我正在尝试列出可用的铃声,并播放与当前默认铃声不同的铃声。
初始化JAudioManager和JRingtoneManager似乎没问题,因为我可以播放默认的铃声。
但是,当我尝试使用RingtoneManager来设置Type或获取Cursor时,程序以系统弹出窗口终止,并显示“应用程序(名称)已中断-重新启动应用程序”。
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作为参考。
发布于 2018-07-05 04:24:34
您创建的RingtoneManager实例不正确。它应该是:
// Forget about obtaining AudioObj - it's not relevant
RingtoneMgr := TJRingtoneManager.JavaClass.init(TAndroidHelper.Activity);这需要Androidapi.Helpers单元
https://stackoverflow.com/questions/51178531
复制相似问题