Reputation: 11
Using Androidapi.JNI.Media
with Delphi 10.2 Tokyo.
I am trying to list the available ringtones and play a different one from current default.
Initialization of JAudioManager
and JRingtoneManager
seems ok, because I can play the default ringtone.
But when I try to use the RingtoneManager
to set Type
, or get a Cursor
, the program terminates with a system popup which say "The Application (name) was interrupted - restart the app".
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;
Any idea? Did I forget to initialize something?
I used this documentation as reference.
Upvotes: 0
Views: 456
Reputation: 3602
You're creating the RingtoneManager instance incorrectly. It should be:
// Forget about obtaining AudioObj - it's not relevant
RingtoneMgr := TJRingtoneManager.JavaClass.init(TAndroidHelper.Activity);
This requires the Androidapi.Helpers unit
Upvotes: 2