>> 在 AndroID 13 中引入了通知許可權: android.permission.POST_NOTIFICATIONS
在 AndroID 13 之前,可以直接透過 NotificationCenter 控制元件來傳送訊息;
在 AndroID 13 之後,需要動態申請此許可權,才可以傳送通知;
>> 動態許可權申請
procedure TForm1.Button1Click(Sender: TObject); var tmpPermissions: TArray<string>; begin // 從AndroID 13 開始,通知許可權需要申請 if TJBuild_Version.JavaClass.SDK_INT > 32 then begin tmpPermissions := [JStringToString(TJManifest_permission.JavaClass.POST_NOTIFICATIONS)]; // 申請許可權 Permissionsservice.RequestPermissions(tmpPermissions, RequestPermissionsResult, DisplayRationale); end else //低於此版本的,直接傳送通知 SendNotification; end;
*** 若只是動態 申請,經測試,在AndroID14手機上,還是無法彈出授權彈窗;
*** 經查,需要在 AndroidManifest.xml 文件中,要申請通知許可權,之後在程式碼中動態申請許可權,才會彈窗;
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
>> 通知傳送
procedure TForm1.SendNotification; var tmpNotification: TNotification; tmpDelay: Integer; begin // tmpNotification := TNotification.Create; tmpNotification := NotificationCenter1.CreateNotification; try tmpNotification.Name := edt_Name.Text; // 唯一 tmpNotification.Title := edt_Title.Text; // 標題 tmpNotification.AlertBody := edt_Body.Text; // 名稱 tmpNotification.Number := 66; //數量 tmpNotification.AlertAction := '檢視來源'; tmpNotification.HasAction := True; tmpDelay := StrToIntDef(edt_Delay.Text, 0); if tmpDelay > 0 then begin tmpNotification.FireDate := IncSecond(Now, tmpDelay); NotificationCenter1.ScheduleNotification(tmpNotification) end else NotificationCenter1.PresentNotification(tmpNotification); finally tmpNotification.Free; end; end;