Recent

Author Topic: laz4android play a mp3 need what uses-permission?  (Read 4467 times)

greenzyzyzy

  • Full Member
  • ***
  • Posts: 249
laz4android play a mp3 need what uses-permission?
« on: May 15, 2015, 03:13:34 pm »
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, '<init>', '()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

  • Full Member
  • ***
  • Posts: 249
Re: laz4android play a mp3 need what uses-permission?
« Reply #1 on: May 16, 2015, 07:26:25 am »
no body likes to help me? :o

jmpessoa

  • Hero Member
  • *****
  • Posts: 2301
Re: laz4android play a mp3 need what uses-permission?
« Reply #2 on: May 16, 2015, 07:43:45 am »
change "SetDataSource" to "setDataSource"
Prepare to "prepare" 
Start to "start"  etc....

Good Luck!
Lamw: Lazarus Android Module Wizard
https://github.com/jmpessoa/lazandroidmodulewizard

greenzyzyzy

  • Full Member
  • ***
  • Posts: 249
Re: laz4android play a mp3 need what uses-permission?
« Reply #3 on: May 16, 2015, 09:41:45 am »
change "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

  • Full Member
  • ***
  • Posts: 249
Re: laz4android play a mp3 need what uses-permission?
« Reply #4 on: May 16, 2015, 10:03:13 am »
change "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, '<init>', '()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, '<init>', '()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?
« Last Edit: May 16, 2015, 10:07:12 am by greenzyzyzy »

greenzyzyzy

  • Full Member
  • ***
  • Posts: 249
Re: laz4android play a mp3 need what uses-permission?
« Reply #5 on: May 16, 2015, 12:19:59 pm »
change "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

  • Hero Member
  • *****
  • Posts: 2301
Re: laz4android play a mp3 need what uses-permission?
« Reply #6 on: May 17, 2015, 07:27:21 am »
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_class,create_id);

//here!!
jmediaplayer_jobject :=javaEnvRef^^.NewGlobalRef(javaEnvRef,jmediaplayer_jobject); 

good luck!
Lamw: Lazarus Android Module Wizard
https://github.com/jmpessoa/lazandroidmodulewizard

greenzyzyzy

  • Full Member
  • ***
  • Posts: 249
Re: laz4android play a mp3 need what uses-permission?
« Reply #7 on: May 17, 2015, 09:49:29 am »
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_class,create_id);

//here!!
jmediaplayer_jobject :=javaEnvRef^^.NewGlobalRef(javaEnvRef,jmediaplayer_jobject); 

good luck!

thank you very much.

kwer

  • New Member
  • *
  • Posts: 13
  • Its my fortune to have it, its my fate to lose it.
Re: laz4android play a mp3 need what uses-permission?
« Reply #8 on: May 25, 2015, 10:58:03 am »
 :)   studying...
----------------------------------
Duolong, Please prepare me with the fastest horse, I must  leave now!
----------------------------------

 

TinyPortal © 2005-2018