laz4android play a mp3 need what uses-permission? lazarus / 43-Android ---------------------------------------------------------------------- greenzyzyzy · 2015-05-15 13:13 laz4android play a mp3 need what uses-permission? i have write a mediaplayer unit ,but it can not run ,i do not know where is wrong? code put here: unit mediaplayer; {$mode objfpc}{$H+} interface uses   Classes, SysUtils,jni,customdrawnint; var   jmediaplayer_class:jclass;   jmediaplayer_jobject:jobject;   create_id:jmethodid;   setdatasource_id:jmethodid;   prepare_id:jmethodid;   start_id:jmethodid;   release_id:jmethodid; procedure media_create(); procedure SetDataSource(path: string); procedure Prepare(); procedure Start(); procedure Release(); implementation procedure media_create(); begin  jmediaplayer_class:=javaEnvRef^^.FindClass(javaEnvRef,'android/media/ MediaPlayer');  create_id:= javaEnvRef^^.GetMethodID(javaEnvRef, jmediaplayer_class, '', '()V');  setdatasource_id:= javaEnvRef^^.GetMethodID(javaEnvRef, jmediaplayer_class, 'SetDataSource', '(Ljava/lang/String;)V');  prepare_id:= javaEnvRef^^.GetMethodID(javaEnvRef, jmediaplayer_class, 'Prepare', '()V');  start_id:= javaEnvRef^^.GetMethodID(javaEnvRef, jmediaplayer_class, 'Start', '()V');  release_id:= javaEnvRef^^.GetMethodID(javaEnvRef, jmediaplayer_class, 'Release', '()V');  jmediaplayer_jobject:=javaEnvRef^^.NewObject(javaEnvRef,jmediaplayer_ class,create_id); end; procedure SetDataSource(path: string); var   lParams: array[0..0] of jValue; begin  lParams[0].l := javaEnvRef^^.NewStringUTF(javaEnvRef, PChar(path));  javaEnvRef^^.CallVoidMethodA(javaEnvRef, jmediaplayer_jobject,setdatasource_id, @lParams[0]);  javaEnvRef^^.DeleteLocalRef(javaEnvRef, lParams[0].l); end; procedure Prepare(); begin  javaEnvRef^^.CallVoidMethod(javaEnvRef, jmediaplayer_jobject,prepare_id); end; procedure Start(); begin  javaEnvRef^^.CallVoidMethod(javaEnvRef, jmediaplayer_jobject,start_id); end; procedure Release(); begin  javaEnvRef^^.CallVoidMethod(javaEnvRef, jmediaplayer_jobject,release_id); end; end. ---------------------------------------------------------------------- greenzyzyzy · 2015-05-16 05:26 no body likes to help me? ---------------------------------------------------------------------- jmpessoa · 2015-05-16 05:43 change "SetDataSource" to "setDataSource" Prepare to "prepare"  Start to "start"  etc.... Good Luck! ---------------------------------------------------------------------- greenzyzyzy · 2015-05-16 07:41 Quote from: jmpessoa on May 16, 2015, 07:43:45 amchange "SetDataSource" to "setDataSource" Prepare to "prepare"  Start to "start"  etc.... Good Luck! thank you for reply,media_create( ) procedure run pass. but next procedure still can not run. Code: [Select]procedure SetDataSource(path: string); var   lParams: array[0..0] of jValue; begin  lParams[0].l := javaEnvRef^^.NewStringUTF(javaEnvRef, PChar(path));  javaEnvRef^^.CallVoidMethodA(javaEnvRef, jmediaplayer_jobject,setdatasource_id, @lParams[0]);  javaEnvRef^^.DeleteLocalRef(javaEnvRef, lParams[0].l); end; procedure Prepare(); begin  javaEnvRef^^.CallVoidMethod(javaEnvRef, jmediaplayer_jobject,prepare_id); end; procedure Start(); begin  javaEnvRef^^.CallVoidMethod(javaEnvRef, jmediaplayer_jobject,start_id); end; procedure Release(); begin  javaEnvRef^^.CallVoidMethod(javaEnvRef, jmediaplayer_jobject,release_id); end; end. run these codes still halt. ---------------------------------------------------------------------- greenzyzyzy · 2015-05-16 08:03 Quote from: jmpessoa on May 16, 2015, 07:43:45 amchange "SetDataSource" to "setDataSource" Prepare to "prepare"  Start to "start"  etc.... Good Luck! if i write code like this that will ok: Code: [Select]procedure test(); var   jmediaplayer_class:jclass;   jmediaplayer_jobject:jobject;   create_id:jmethodid;   setdatasource_id:jmethodid;   prepare_id:jmethodid;   start_id:jmethodid;   release_id:jmethodid;   lParams: array[0..0] of jValue; begin   jmediaplayer_class:=javaEnvRef^^.FindClass(javaEnvRef,'android/media /MediaPlayer');  create_id:= javaEnvRef^^.GetMethodID(javaEnvRef, jmediaplayer_class, '', '()V');  setdatasource_id:= javaEnvRef^^.GetMethodID(javaEnvRef, jmediaplayer_class, 'setDataSource', '(Ljava/lang/String;)V');  prepare_id:= javaEnvRef^^.GetMethodID(javaEnvRef, jmediaplayer_class, 'prepare', '()V');  start_id:= javaEnvRef^^.GetMethodID(javaEnvRef, jmediaplayer_class, 'start', '()V');  release_id:= javaEnvRef^^.GetMethodID(javaEnvRef, jmediaplayer_class, 'release', '()V');  jmediaplayer_jobject:=javaEnvRef^^.NewObject(javaEnvRef,jmediaplayer_ class,create_id);  //lParams[0].l := javaEnvRef^^.NewStringUTF(javaEnvRef, PChar('/sdcard/mybmp/alert.mp3'));  lParams[0].l := javaEnvRef^^.NewStringUTF(javaEnvRef, PChar('/storage/sdcard0/mybmp/alert.mp3'));  javaEnvRef^^.CallVoidMethodA(javaEnvRef, jmediaplayer_jobject,setdatasource_id, @lParams[0]);  javaEnvRef^^.DeleteLocalRef(javaEnvRef, lParams[0].l);  javaEnvRef^^.CallVoidMethod(javaEnvRef, jmediaplayer_jobject,prepare_id);  javaEnvRef^^.CallVoidMethod(javaEnvRef, jmediaplayer_jobject,start_id);  //javaEnvRef^^.CallVoidMethod(javaEnvRef, jmediaplayer_jobject,release_id); end; but if like this it will have error.: Code: [Select]procedure media_create(); begin  jmediaplayer_class:=javaEnvRef^^.FindClass(javaEnvRef,'android/media/ MediaPlayer');  create_id:= javaEnvRef^^.GetMethodID(javaEnvRef, jmediaplayer_class, '', '()V');  setdatasource_id:= javaEnvRef^^.GetMethodID(javaEnvRef, jmediaplayer_class, 'setDataSource', '(Ljava/lang/String;)V');  prepare_id:= javaEnvRef^^.GetMethodID(javaEnvRef, jmediaplayer_class, 'prepare', '()V');  start_id:= javaEnvRef^^.GetMethodID(javaEnvRef, jmediaplayer_class, 'start', '()V');  release_id:= javaEnvRef^^.GetMethodID(javaEnvRef, jmediaplayer_class, 'release', '()V');  jmediaplayer_jobject:=javaEnvRef^^.NewObject(javaEnvRef,jmediaplayer_ class,create_id); end; procedure SetDataSource(path: string); var   lParams: array[0..0] of jValue; begin  lParams[0].l := javaEnvRef^^.NewStringUTF(javaEnvRef, PChar(path));  javaEnvRef^^.CallVoidMethodA(javaEnvRef, jmediaplayer_jobject,setdatasource_id, @lParams[0]);  javaEnvRef^^.DeleteLocalRef(javaEnvRef, lParams[0].l); end; procedure Prepare(); begin  javaEnvRef^^.CallVoidMethod(javaEnvRef, jmediaplayer_jobject,prepare_id); end; procedure Start(); begin  javaEnvRef^^.CallVoidMethod(javaEnvRef, jmediaplayer_jobject,start_id); end; procedure Release(); begin  javaEnvRef^^.CallVoidMethod(javaEnvRef, jmediaplayer_jobject,release_id); end;                      is that means jni can not use golbal viriants? ---------------------------------------------------------------------- greenzyzyzy · 2015-05-16 10:19 Quote from: jmpessoa on May 16, 2015, 07:43:45 amchange "SetDataSource" to "setDataSource" Prepare to "prepare"  Start to "start"  etc.... Good Luck! last question,laz4android's androidlcl example.how to make it as multi apk files?just like make more than two apk package. it can install seperately and running. ---------------------------------------------------------------------- jmpessoa · 2015-05-17 05:27 Quote...is that means jni can not use golbal viriants? You need a litle more code to get a jni global reference: 1. declare jmediaplayer_jobject as pascal global: var   jmediaplayer_jobject: jObject; 2. get a global jni reference: jmediaplayer_jobject:=javaEnvRef^^.NewObject(javaEnvRef,jmediaplayer_c lass,create_id); //here!! jmediaplayer_jobject :=javaEnvRef^^.NewGlobalRef(javaEnvRef,jmediaplayer_jobject);  good luck! ---------------------------------------------------------------------- greenzyzyzy · 2015-05-17 07:49 Quote from: jmpessoa on May 17, 2015, 07:27:21 amQuote...is that means jni can not use golbal viriants? You need a litle more code to get a jni global reference: 1. declare jmediaplayer_jobject as pascal global: var   jmediaplayer_jobject: jObject; 2. get a global jni reference: jmediaplayer_jobject:=javaEnvRef^^.NewObject(javaEnvRef,jmediaplayer_c lass,create_id); //here!! jmediaplayer_jobject :=javaEnvRef^^.NewGlobalRef(javaEnvRef,jmediaplayer_jobject);  good luck! thank you very much. ---------------------------------------------------------------------- kwer · 2015-05-25 08:58 studying...