0

Androidapi.JNI.Media与 Delphi 10.2 Tokyo 一起使用。

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

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

但是当我尝试使用RingtoneManagerto setType或 get aCursor时,程序会以系统弹出窗口终止,提示“应用程序(名称)被中断 - 重新启动应用程序”。

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;

任何想法?我忘了初始化一些东西吗?

将此文档用作参考。

4

1 回答 1

2

您正在错误地创建 RingtoneManager 实例。它应该是:

// Forget about obtaining AudioObj - it's not relevant
RingtoneMgr := TJRingtoneManager.JavaClass.init(TAndroidHelper.Activity);

这需要 Androidapi.Helpers 单元

于 2018-07-04T20:24:33.770 回答