Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/198.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android delphi firemonkey中PhoneStateListener侦听OnCellinformed的问题_Android_Delphi_Firemonkey_Telephonymanager_Phone State Listener - Fatal编程技术网

Android delphi firemonkey中PhoneStateListener侦听OnCellinformed的问题

Android delphi firemonkey中PhoneStateListener侦听OnCellinformed的问题,android,delphi,firemonkey,telephonymanager,phone-state-listener,Android,Delphi,Firemonkey,Telephonymanager,Phone State Listener,如果你能帮助我,我将不胜感激。我正在用delphi firemonkey编写一个程序,显示手机信息。我需要使用JPhoneStateListener类监听单元格信息的更改。 首先,我为ImplementMain类编写了一个类,如下所示: type TPL = class(TJavaGenericImport<JPhoneStateListenerClass, JPhoneStateListener>) public construc


如果你能帮助我,我将不胜感激。我正在用delphi firemonkey编写一个程序,显示手机信息。我需要使用JPhoneStateListener类监听单元格信息的更改。
首先,我为ImplementMain类编写了一个类,如下所示:

    type
    TPL = class(TJavaGenericImport<JPhoneStateListenerClass, JPhoneStateListener>)
        public
          constructor create;
          Destructor Destroy; Override;
          procedure onCallForwardingIndicatorChanged(cfi: Boolean); cdecl;
          procedure onCallStateChanged(state: Integer; incomingNumber: JString); cdecl;
          ......... (and other procedures of main class)
    end;
    Implementation

    Constructor TPL.Create;
        Begin

        End;
    Destructor TPL.Destroy;
        Begin
            Inherited Destroy;
        End;
    procedure TPL.onCallForwardingIndicatorChanged(cfi: Boolean);
        Begin

        End;
   .........  
感谢@nolaspeaker

我编辑我的代码如下:

unit main;

interface

uses
  System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
  FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.StdCtrls,
  FMX.Controls.Presentation, FMX.ScrollBox, FMX.Memo, FMX.ExtCtrls, FMX.Helpers.Android, RTL.Controls,
  Androidapi.JNI.Os, Androidapi.Helpers, Androidapi.JNI.Telephony,
  Androidapi.JNI.GraphicsContentViewText, Androidapi.JNI.JavaTypes,
  Androidapi.JNIBridge, Androidapi.JNI.App;

type
  TPhoneStateListener = class;

  TForm1 = class(TForm)
    Button1: TButton;
    RTLFixer1: TRTLFixer;
    Memo1: TMemo;
    Timer1: TTimer;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
    procedure Timer1Timer(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure InitPSListener(Start: Boolean);
  private
    PhoneStateListener: TPhoneStateListener;
    FSignal: Integer;
    { Private declarations }
  public
    { Public declarations }
  end;

//type
  TPhoneStateListener = class(TJavaLocal, JICustomPhoneStateListener)
  private
    [weak]
    FParent : TForm1;
  public
    constructor Create(AParent : TForm1);
    procedure onCallForwardingIndicatorChanged(cfi: Boolean); cdecl;
    procedure onCallStateChanged(state: Integer; incomingNumber: JString); cdecl;
    procedure onCellInfoChanged(cellInfo: JList); cdecl;
    procedure onCellLocationChanged(location: JCellLocation); cdecl;
    procedure onDataActivity(direction: Integer); cdecl;
    procedure onDataConnectionStateChanged(state: Integer); overload; cdecl;
    procedure onDataConnectionStateChanged(state: Integer; networkType: Integer); overload; cdecl;
    procedure onMessageWaitingIndicatorChanged(mwi: Boolean); cdecl;
    procedure onServiceStateChanged(serviceState: JServiceState); cdecl;
    procedure onSignalStrengthChanged(asu: Integer); cdecl;
    procedure onSignalStrengthsChanged(signalStrength: JSignalStrength); cdecl;
  end;

var
  Form1: TForm1;

implementation
{$R *.fmx}
{$R *.NmXhdpiPh.fmx ANDROID}

{$R *.LgXhdpiPh.fmx ANDROID}



procedure TForm1.Button1Click(Sender: TObject);
begin
  InitPSListener(True);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  InitPSListener(False);
end;

procedure TForm1.InitPSListener(Start: Boolean);
var
  obj: JObject;
begin

  if PhoneStateListener = nil then
    PhoneStateListener := TPhoneStateListener.Create(Self);
  obj := TAndroidHelper.Context.getSystemService(TJContext.JavaClass.TELEPHONY_SERVICE);
  if obj <> nil then
  begin
    CallinUIThread(procedure
    var
      TelephonyManager: JTelephonyManager;
      PSL: JCustomPhoneStateListener;
    begin
      TelephonyManager := TJTelephonyManager.Wrap(obj);
      PSL := TJCustomPhoneStateListener.JavaClass.init(PhoneStateListener);
      if Start then
        TelephonyManager.listen(PSL,
          TJPhoneStateListener.JavaClass.LISTEN_SIGNAL_STRENGTHS)
//          or TJPhoneStateListener.JavaClass.LISTEN_SIGNAL_STRENGTH
//          or TJPhoneStateListener.JavaClass.LISTEN_DATA_ACTIVITY
      else
        TelephonyManager.listen(PSL,
          TJPhoneStateListener.JavaClass.LISTEN_NONE)
    end
    );
  end;

end;


{ TPhoneStateListener }

constructor TPhoneStateListener.Create(AParent: TForm1);
begin
  inherited Create;
  FParent := AParent;
end;

procedure TPhoneStateListener.onCallForwardingIndicatorChanged(cfi: Boolean);
begin
end;

procedure TPhoneStateListener.onCallStateChanged(state: Integer;
  incomingNumber: JString);
begin
end;

procedure TPhoneStateListener.onCellInfoChanged(cellInfo: JList);
begin
end;

procedure TPhoneStateListener.onCellLocationChanged(location: JCellLocation);
begin
end;

procedure TPhoneStateListener.onDataActivity(direction: Integer);
begin
end;

procedure TPhoneStateListener.onDataConnectionStateChanged(state: Integer);
begin
end;

procedure TPhoneStateListener.onDataConnectionStateChanged(state,
  networkType: Integer);
begin
end;

procedure TPhoneStateListener.onMessageWaitingIndicatorChanged(mwi: Boolean);
begin
end;

procedure TPhoneStateListener.onServiceStateChanged(
  serviceState: JServiceState);
begin
end;

procedure TPhoneStateListener.onSignalStrengthChanged(asu: Integer);
begin
end;

procedure TPhoneStateListener.onSignalStrengthsChanged(
  signalStrength: JSignalStrength);
begin
  FParent.onSignalStrengthsChanged(signalStrength);  <---- error is here
end;

procedure TForm1.OnSignalStrengthsChanged(signalStrength: JSignalStrength);
begin
  FSignal := signalStrength.getLevel; // 0 - 4   <----- and is here
end;

end.
unitmain;
接口
使用
System.SysUtils、System.TYPE、System.UITYPE、System.Classes、System.VARIANT、,
FMX.类型,FMX.控件,FMX.窗体,FMX.图形,FMX.对话框,FMX.StdCtrls,
FMX.Controls.Presentation、FMX.ScrollBox、FMX.Memo、FMX.ExtCtrls、FMX.Helpers.Android、RTL.Controls、,
Androidapi.JNI.Os,Androidapi.Helpers,Androidapi.JNI.Telephony,
Androidapi.JNI.GraphicsContentViewText,Androidapi.JNI.JavaTypes,
Androidapi.JNIBridge,Androidapi.JNI.App;
类型
TPhoneStateListener=class;
TForm1=类(TForm)
按钮1:t按钮;
RTLFixer1:TRTLFixer;
备忘录1:TMemo;
定时器1:TTimer;
按钮2:t按钮;
程序按钮1点击(发送方:ToObject);
过程FormCloseQuery(发送方:ToObject;变量CanClose:布尔);
程序定时器1定时器(发送方:TObject);
程序按钮2点击(发送者:对象);
过程InitPSListener(开始:布尔值);
私有的
PhoneStateListener:TPhoneStateListener;
FSignal:整数;
{私有声明}
公众的
{公开声明}
结束;
//类型
TPhoneStateListener=class(TJavaLocal,JICustomPhoneStateStener)
私有的
[微弱]
家长:TForm1;
公众的
构造函数创建(AParent:TForm1);
一旦调用ForwardingIndicator更改时的过程(cfi:布尔值);cdecl;
过程onCallStateChanged(状态:整数;incomingNumber:JString);cdecl;
更改了cellInfo的程序(cellInfo:JList);cdecl;
更改了CellLocation的程序(位置:JCellLocation);cdecl;
过程onDataActivity(方向:整数);cdecl;
过程onDataConnectionStateChanged(状态:整数);超载;cdecl;
过程onDataConnectionStateChanged(状态:整数;网络类型:整数);超载;cdecl;
消息编辑指示或更改的过程(mwi:布尔值);cdecl;
serviceState上的过程已更改(serviceState:JServiceState);cdecl;
信号强度更改程序(asu:整数);cdecl;
信号强度程序更改(信号强度:J信号强度);cdecl;
结束;
变量
表1:TForm1;
实施
{$R*.fmx}
{$R*.nmxhdiph.fmx ANDROID}
{$R*.lgxhdiph.fmx ANDROID}
程序TForm1.按钮1单击(发送方:TObject);
开始
InitPSListener(True);
结束;
程序TForm1.按钮2单击(发送方:TObject);
开始
InitPSListener(False);
结束;
过程TForm1.InitPSListener(开始:布尔值);
变量
obj:JObject;
开始
如果PhoneStateListener=nil,则
PhoneStateListener:=TPhoneStateListener.Create(Self);
obj:=TAndroidHelper.Context.getSystemService(TJContext.JavaClass.TELEPHONY_服务);
如果对象为零,则
开始
CallinUIThread(程序
变量
电话管理员:JTelephonyManager;
PSL:JCustomponestateListener;
开始
TelephonyManager:=TJTelephonyManager.Wrap(obj);
PSL:=tjcustomponestatelistener.JavaClass.init(PhoneStateListener);
如果开始的话
TelephonyManager.listen(PSL,
TJPhoneStateListener.JavaClass.LISTEN(信号强度)
//或TJPhoneStateListener.JavaClass.LISTEN\u信号强度
//或TJPhoneStateListener.JavaClass.LISTEN\u数据\u活动
其他的
TelephonyManager.listen(PSL,
TJPhoneStateListener.JavaClass.LISTEN(无)
结束
);
结束;
结束;
{TPhoneStateListener}
构造函数TPhoneStateListener.Create(AParent:TForm1);
开始
继承创造;
FParent:=公寓;
结束;
过程TPhoneStateListener.onCallForwardingIndicator已更改(cfi:布尔值);
开始
结束;
过程TPhoneStateListener.onCallStateChanged(状态:整数;
收入编号:JString);
开始
结束;
程序TPhoneStateListener.onCellInfoChanged(cellInfo:JList);
开始
结束;
程序TPhoneStateListener.oncellLocation更改(位置:JCellLocation);
开始
结束;
过程TPhoneStateListener.onDataActivity(方向:整数);
开始
结束;
过程TPhoneStateListener.onDataConnectionStateChanged(状态:整数);
开始
结束;
程序TPhoneStateListener.onDataConnectionStateChanged(状态,
网络类型:整数);
开始
结束;
过程TPhoneStateListener.onMessageWaitingIndicator更改(mwi:布尔值);
开始
结束;
程序TPhoneStateListener.onServiceStateChanged(
serviceState:JServiceState);
开始
结束;
程序TPhoneStateListener.onSignalsStrengthChanged(asu:整数);
开始
结束;
程序TPhoneStateListener.on信号强度已更改(
信号强度:J信号强度);
开始

F信号强度变化(信号强度) 这里有太多要解释的。我希望这能帮助您解决编码问题

type

  TPhoneStateListener = class;

  TfrmAppMain = class(TForm)
    HeaderToolBar: TToolBar;
    ToolBarLabel: TLabel;
    TabControl1: TTabControl;


将光标放在TForm1.on信号强度更改(信号强度:JSignalStrength)上;输入源代码并按Ctrl-Shift-C。非常感谢。它可以工作。不客气。注意:根据您使用的是哪个Delphi版本,以及此代码是在主机中还是在服务中,可能不需要
CallinUIThread()
。如果未使用它,则可以将
TelephonyManager
PSL
移动到
frmAppMain
范围。
unit main;

interface

uses
  System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
  FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.StdCtrls,
  FMX.Controls.Presentation, FMX.ScrollBox, FMX.Memo, FMX.ExtCtrls, FMX.Helpers.Android, RTL.Controls,
  Androidapi.JNI.Os, Androidapi.Helpers, Androidapi.JNI.Telephony,
  Androidapi.JNI.GraphicsContentViewText, Androidapi.JNI.JavaTypes,
  Androidapi.JNIBridge, Androidapi.JNI.App;

type
  TPhoneStateListener = class;

  TForm1 = class(TForm)
    Button1: TButton;
    RTLFixer1: TRTLFixer;
    Memo1: TMemo;
    Timer1: TTimer;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
    procedure Timer1Timer(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure InitPSListener(Start: Boolean);
  private
    PhoneStateListener: TPhoneStateListener;
    FSignal: Integer;
    { Private declarations }
  public
    { Public declarations }
  end;

//type
  TPhoneStateListener = class(TJavaLocal, JICustomPhoneStateListener)
  private
    [weak]
    FParent : TForm1;
  public
    constructor Create(AParent : TForm1);
    procedure onCallForwardingIndicatorChanged(cfi: Boolean); cdecl;
    procedure onCallStateChanged(state: Integer; incomingNumber: JString); cdecl;
    procedure onCellInfoChanged(cellInfo: JList); cdecl;
    procedure onCellLocationChanged(location: JCellLocation); cdecl;
    procedure onDataActivity(direction: Integer); cdecl;
    procedure onDataConnectionStateChanged(state: Integer); overload; cdecl;
    procedure onDataConnectionStateChanged(state: Integer; networkType: Integer); overload; cdecl;
    procedure onMessageWaitingIndicatorChanged(mwi: Boolean); cdecl;
    procedure onServiceStateChanged(serviceState: JServiceState); cdecl;
    procedure onSignalStrengthChanged(asu: Integer); cdecl;
    procedure onSignalStrengthsChanged(signalStrength: JSignalStrength); cdecl;
  end;

var
  Form1: TForm1;

implementation
{$R *.fmx}
{$R *.NmXhdpiPh.fmx ANDROID}

{$R *.LgXhdpiPh.fmx ANDROID}



procedure TForm1.Button1Click(Sender: TObject);
begin
  InitPSListener(True);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  InitPSListener(False);
end;

procedure TForm1.InitPSListener(Start: Boolean);
var
  obj: JObject;
begin

  if PhoneStateListener = nil then
    PhoneStateListener := TPhoneStateListener.Create(Self);
  obj := TAndroidHelper.Context.getSystemService(TJContext.JavaClass.TELEPHONY_SERVICE);
  if obj <> nil then
  begin
    CallinUIThread(procedure
    var
      TelephonyManager: JTelephonyManager;
      PSL: JCustomPhoneStateListener;
    begin
      TelephonyManager := TJTelephonyManager.Wrap(obj);
      PSL := TJCustomPhoneStateListener.JavaClass.init(PhoneStateListener);
      if Start then
        TelephonyManager.listen(PSL,
          TJPhoneStateListener.JavaClass.LISTEN_SIGNAL_STRENGTHS)
//          or TJPhoneStateListener.JavaClass.LISTEN_SIGNAL_STRENGTH
//          or TJPhoneStateListener.JavaClass.LISTEN_DATA_ACTIVITY
      else
        TelephonyManager.listen(PSL,
          TJPhoneStateListener.JavaClass.LISTEN_NONE)
    end
    );
  end;

end;


{ TPhoneStateListener }

constructor TPhoneStateListener.Create(AParent: TForm1);
begin
  inherited Create;
  FParent := AParent;
end;

procedure TPhoneStateListener.onCallForwardingIndicatorChanged(cfi: Boolean);
begin
end;

procedure TPhoneStateListener.onCallStateChanged(state: Integer;
  incomingNumber: JString);
begin
end;

procedure TPhoneStateListener.onCellInfoChanged(cellInfo: JList);
begin
end;

procedure TPhoneStateListener.onCellLocationChanged(location: JCellLocation);
begin
end;

procedure TPhoneStateListener.onDataActivity(direction: Integer);
begin
end;

procedure TPhoneStateListener.onDataConnectionStateChanged(state: Integer);
begin
end;

procedure TPhoneStateListener.onDataConnectionStateChanged(state,
  networkType: Integer);
begin
end;

procedure TPhoneStateListener.onMessageWaitingIndicatorChanged(mwi: Boolean);
begin
end;

procedure TPhoneStateListener.onServiceStateChanged(
  serviceState: JServiceState);
begin
end;

procedure TPhoneStateListener.onSignalStrengthChanged(asu: Integer);
begin
end;

procedure TPhoneStateListener.onSignalStrengthsChanged(
  signalStrength: JSignalStrength);
begin
  FParent.onSignalStrengthsChanged(signalStrength);  <---- error is here
end;

procedure TForm1.OnSignalStrengthsChanged(signalStrength: JSignalStrength);
begin
  FSignal := signalStrength.getLevel; // 0 - 4   <----- and is here
end;

end.
type

  TPhoneStateListener = class;

  TfrmAppMain = class(TForm)
    HeaderToolBar: TToolBar;
    ToolBarLabel: TLabel;
    TabControl1: TTabControl;
  private
    PhoneStateListener: TPhoneStateListener;
    FSignal: Integer;
  TPhoneStateListener = class(TJavaLocal, JICustomPhoneStateListener)
  private
    [weak]
    FParent : TfrmAppMain;
  public
    constructor Create(AParent : TfrmAppMain);
    procedure onCallForwardingIndicatorChanged(cfi: Boolean); cdecl;
    procedure onCallStateChanged(state: Integer; incomingNumber: JString); cdecl;
    procedure onCellInfoChanged(cellInfo: JList); cdecl;
    procedure onCellLocationChanged(location: JCellLocation); cdecl;
    procedure onDataActivity(direction: Integer); cdecl;
    procedure onDataConnectionStateChanged(state: Integer); overload; cdecl;
    procedure onDataConnectionStateChanged(state: Integer; networkType: Integer); overload; cdecl;
    procedure onMessageWaitingIndicatorChanged(mwi: Boolean); cdecl;
    procedure onServiceStateChanged(serviceState: JServiceState); cdecl;
    procedure onSignalStrengthChanged(asu: Integer); cdecl;
    procedure onSignalStrengthsChanged(signalStrength: JSignalStrength); cdecl;
  end;
procedure TfrmAppMain.FormShow(Sender: TObject);
begin
  InitPSListener(True);
end;
procedure TfrmAppMain.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  InitPSListener(False);
end;
procedure TfrmAppMain.InitPSListener(Start: Boolean);
var
  obj: JObject;
begin

  if PhoneStateListener = nil then
    PhoneStateListener := TPhoneStateListener.Create(Self);
  obj := TAndroidHelper.Context.getSystemService(TJContext.JavaClass.TELEPHONY_SERVICE);
  if obj <> nil then
  begin
    CallinUIThread(procedure
    var
      TelephonyManager: JTelephonyManager;
      PSL: JCustomPhoneStateListener;
    begin
      TelephonyManager := TJTelephonyManager.Wrap(obj);
      PSL := TJCustomPhoneStateListener.JavaClass.init(PhoneStateListener);
      if Start then
        TelephonyManager.listen(PSL,
          TJPhoneStateListener.JavaClass.LISTEN_SIGNAL_STRENGTHS)
//          or TJPhoneStateListener.JavaClass.LISTEN_SIGNAL_STRENGTH
//          or TJPhoneStateListener.JavaClass.LISTEN_DATA_ACTIVITY
      else
        TelephonyManager.listen(PSL,
          TJPhoneStateListener.JavaClass.LISTEN_NONE)
    end
    );
  end;

end;
{ TPhoneStateListener }

constructor TPhoneStateListener.Create(AParent: TfrmAppMain);
begin
  inherited Create;
  FParent := AParent;
end;

procedure TPhoneStateListener.onCallForwardingIndicatorChanged(cfi: Boolean);
begin
end;

procedure TPhoneStateListener.onCallStateChanged(state: Integer;
  incomingNumber: JString);
begin
end;

procedure TPhoneStateListener.onCellInfoChanged(cellInfo: JList);
begin
end;

procedure TPhoneStateListener.onCellLocationChanged(location: JCellLocation);
begin
end;

procedure TPhoneStateListener.onDataActivity(direction: Integer);
begin
end;

procedure TPhoneStateListener.onDataConnectionStateChanged(state: Integer);
begin
end;

procedure TPhoneStateListener.onDataConnectionStateChanged(state,
  networkType: Integer);
begin
end;

procedure TPhoneStateListener.onMessageWaitingIndicatorChanged(mwi: Boolean);
begin
end;

procedure TPhoneStateListener.onServiceStateChanged(
  serviceState: JServiceState);
begin
end;

procedure TPhoneStateListener.onSignalStrengthChanged(asu: Integer);
begin
end;

procedure TPhoneStateListener.onSignalStrengthsChanged(
  signalStrength: JSignalStrength);
begin
  FParent.onSignalStrengthsChanged(signalStrength);
end;

procedure TfrmAppMain.OnSignalStrengthsChanged(signalStrength: JSignalStrength);
begin
  FSignal := signalStrength.getLevel; // 0 - 4
end;