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.ListView.Types, IPPeerClient, System.Rtti, System.Bindings.Outputs,
Fmx.Bind.Editors, Data.Bind.EngExt, Fmx.Bind.DBEngExt, Data.Bind.Components,
REST.Client, Data.Bind.ObjectScope, FMX.StdCtrls, FMX.ListView, System.JSON, REST.types,
FMX.Layouts, FMX.Memo, FMX.ListBox, REST.Json, FMX.Colors, FMX.Objects, gcmnotification,
FMX.Edit;
type
TForm1 = class(TForm)
ToolBar1: TToolBar;
ToolBar2: TToolBar;
Label1: TLabel;
SpeedButton1: TSpeedButton;
SpeedButton2: TSpeedButton;
SpeedButton3: TSpeedButton;
RESTClient1: TRESTClient;
RESTRequest1: TRESTRequest;
RESTResponse1: TRESTResponse;
BindingsList1: TBindingsList;
MemoContent: TMemo;
LinkControlToFieldContent: TLinkControlToField;
panel2: TPanel;
ToolBar3: TToolBar;
Label2: TLabel;
btnExit: TSpeedButton;
Label3: TLabel;
email: TEdit;
Label4: TLabel;
Rectangle1: TRectangle;
btnReg: TButton;
popup: TRectangle;
Label5: TLabel;
btnOK: TColorButton;
Label6: TLabel;
procedure SpeedButton1Click(Sender: TObject);
procedure Label5Click(Sender: TObject);
procedure btnExitClick(Sender: TObject);
procedure btnRegClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
gcmn: TGCMNotification;
end;
const
GCM_SENDERID = '460004329921';
API_ID = 'AIzaSyBclEqDL-yFJRZZ6ESpBZLACJ27ROh7oao';
var
Form1: TForm1;
implementation
{$R *.fmx}
procedure TForm1.btnExitClick(Sender: TObject);
begin
FreeAndNil(Application);
end;
procedure TForm1.btnRegClick(Sender: TObject);
begin
gcmn.SENDERID := GCM_SENDERID;
if gcmn.doRegister then
begin
if email.Text='' then
popup.Visible := true
else
begin
RESTRequest1.Method := TRESTRequestMethod.rmPOST;
RESTRequest1.AddParameter('type', 'register', TRESTRequestParameterKind.pkGETorPOST);
RESTRequest1.AddParameter('regID', gcmn.RegistrationID, TRESTRequestParameterKind.pkGETorPOST);
RESTRequest1.AddParameter('email', email.Text, TRESTRequestParameterKind.pkGETorPOST);
RESTRequest1.Execute;
end;
end;
end;
procedure TForm1.Label5Click(Sender: TObject);
begin
popup.Visible:=false;
end;
procedure TForm1.SpeedButton1Click(Sender: TObject);
var
jValue:TJSONValue;
begin
RESTRequest1.Method := TRESTRequestMethod.rmPOST;
RESTRequest1.AddParameter('type', 'select', TRESTRequestParameterKind.pkGETorPOST);
RESTRequest1.AddParameter('table_name', 'person', TRESTRequestParameterKind.pkGETorPOST);
RESTRequest1.Execute;
jValue:=RESTResponse1.JSONValue;
MemoContent.Text := jValue.ToString;
end;
end.
当我试图运行程序时,它会将应用程序安装到模拟器,但应用程序无法启动。
我收到了一个错误:
第一次机会异常,售价408839F8美元。异常类分段 故障(11)。处理mClient.apk(1795)
unit gcmnotification;
interface
{$IFDEF ANDROID}
uses
System.SysUtils,
System.Classes,
FMX.Helpers.Android,
Androidapi.Helpers,
Androidapi.JNI.PlayServices,
Androidapi.JNI.GraphicsContentViewText,
Androidapi.JNIBridge,
Androidapi.JNI.JavaTypes;
type
TGCMNotificationMessageKind = (nmMESSAGE_TYPE_MESSAGE, nmMESSAGE_TYPE_DELETED, nmMESSAGE_TYPE_SEND_ERROR);
{ Discription of notification for Notification Center }
TGCMNotificationMessage = class (TPersistent)
private
FKind: TGCMNotificationMessageKind;
FSender: string;
FWhat: integer;
FBody: string;
protected
procedure AssignTo(Dest: TPersistent); override;
public
{ Unique identificator for determenation notification in Notification list }
property Kind: TGCMNotificationMessageKind read FKind write FKind;
property Sender: string read FSender write FSender;
property What: integer read FWhat write FWhat;
property Body: string read FBody write FBody;
constructor Create;
end;
TOnReceiveGCMNotification = procedure (Sender: TObject; ANotification: TGCMNotificationMessage) of object;
TGCMNotification = class(TComponent)
strict private
{ Private declarations }
FRegistrationID: string;
FSenderID: string;
FOnReceiveGCMNotification: TOnReceiveGCMNotification;
FReceiver: JBroadcastReceiver;
FAlreadyRegistered: boolean;
function CheckPlayServicesSupport: boolean;
protected
{ Protected declarations }
public
{ Public declarations }
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
function DoRegister: boolean;
function GetGCMInstance: JGoogleCloudMessaging;
published
{ Published declarations }
property SenderID: string read FSenderID write FSenderID;
property RegistrationID: string read FRegistrationID write FRegistrationID;
property OnReceiveGCMNotification: TOnReceiveGCMNotification read FOnReceiveGCMNotification write FOnReceiveGCMNotification;
end;
{$ENDIF}
implementation
{$IFDEF ANDROID}
uses
uGCMReceiver;
{ TGCMNotification }
function TGCMNotification.CheckPlayServicesSupport: boolean;
var
resultCode: integer;
begin
resultCode := TJGooglePlayServicesUtil.JavaClass.isGooglePlayServicesAvailable(SharedActivity);
result := (resultCode = TJConnectionResult.JavaClass.SUCCESS);
end;
constructor TGCMNotification.Create(AOwner: TComponent);
var
Filter: JIntentFilter;
begin
inherited;
Filter := TJIntentFilter.Create;
FReceiver := TJGCMReceiver.Create(Self);
SharedActivity.registerReceiver(FReceiver, Filter);
FAlreadyRegistered := false;
end;
destructor TGCMNotification.Destroy;
begin
SharedActivity.unregisterReceiver(FReceiver);
FReceiver := nil;
inherited;
end;
function TGCMNotification.DoRegister: boolean;
var
p: TJavaObjectArray<JString>;
gcm: JGoogleCloudMessaging;
begin
if FAlreadyRegistered then
result := true
else
begin
if CheckPlayServicesSupport then
begin
gcm := GetGCMInstance;
p := TJavaObjectArray<JString>.Create(1);
p.Items[0] := StringToJString(FSenderID);
FRegistrationID := JStringToString(gcm.register(p));
FAlreadyRegistered := (FRegistrationID <> '');
result := FAlreadyRegistered;
end
else
result := false;
end;
end;
function TGCMNotification.GetGCMInstance: JGoogleCloudMessaging;
begin
result := TJGoogleCloudMessaging.JavaClass.getInstance(SharedActivity.getApplicationContext);
end;
{ TGCMNotificationMessage }
procedure TGCMNotificationMessage.AssignTo(Dest: TPersistent);
var
DestNotification: TGCMNotificationMessage;
begin
if Dest is TGCMNotificationMessage then
begin
DestNotification := Dest as TGCMNotificationMessage;
DestNotification.Kind := Kind;
DestNotification.What := What;
DestNotification.Sender := Sender;
DestNotification.Body := Body;
end
else
inherited AssignTo(Dest);
end;
constructor TGCMNotificationMessage.Create;
begin
Body := '';
end;
{$ENDIF}
end.
感谢您的帮助..
答案 0 :(得分:0)
也许存在的问题多于此,但最明显的问题是:
gcmn
。 Application
对象。