Jump to content

PhotoPicker for iOS with FileMaker iOS SDK


This topic is 522 days old. Please don't post here. Open a new topic instead.

Recommended Posts

PhotoPicker.jpgNext to your container fields in iOS, you can show a button to insert a picture from the photo libraries. If you'd do this with our older ImagePicker functions, you may get a dialog about permissions to access the photos library. 

 

The new PhotoPicker functions allow you to access a dialog to pick photos from your app without such a dialog. The dialog runs as part of a background app included with iOS, which has all the permissions needed. It can show the whole photo library without your application having access to it. The user can select one or more pictures and have those being available to your applications. The images are then downloaded in the background if needed and you can check progress in a script. 

 

Here is a sample script:

 

If [ MBS( "PhotoPicker.Available") ] 
	Set Variable [ $r ; Value: MBS( "PhotoPicker.Clear") ] 
	# set trigger
	Set Variable [ $r ; Value: MBS( "PhotoPicker.SetScript"; Get(FileName); "GotImage") ] 
	# you can define a limit, 0 = no limit
	Set Variable [ $r ; Value: MBS( "PhotoPicker.SetSelectionLimit"; 10) ] 
	# show the picker!
	Set Variable [ $r ; Value: MBS( "PhotoPicker.Present") ] 
End If
 

And the script triggered looks like the one below. Basically when the script is triggered, we look how many bytes have to be loaded and show a progress dialog for this. We wait until all images are downloaded. Then we loop over the images and read each one into a container field. For HEIC images use our our Container.ReadImageFile function since that function converts the picture then to PNG format. The clear function later removes the images from memory when we don't need them any longer. Take a look on this script:

Set Variable [ $r ; Value: MBS("ProgressDialog.SetTopText"; "Loading images") ] 
Set Variable [ $r ; Value: MBS("ProgressDialog.SetProgress"; -1) ] 
Set Variable [ $r ; Value: MBS("ProgressDialog.Show") ] 
Pause/Resume Script [ Duration (seconds): ,5 ] 
Loop
	Set Variable [ $BytesLoaded ; Value: MBS("PhotoPicker.BytesLoaded") ] 
	Set Variable [ $TotalBytes ; Value: MBS("PhotoPicker.TotalBytes") ] 
	Set Variable [ $r ; Value: MBS("ProgressDialog.SetProgress"; $BytesLoaded * 100 / $TotalBytes ) ] 
	# 
	If [ MBS("PhotoPicker.IsLoading") ] 
		Pause/Resume Script [ Duration (seconds): ,1 ] 
	Else
		Exit Loop If [ 1 ] 
	End If
End Loop
Set Variable [ $r ; Value: MBS("ProgressDialog.Hide") ] 
# 
Set Variable [ $ImageCount ; Value: MBS("PhotoPicker.ImageCount") ] 
Set Variable [ $index ; Value: 0 ] 
If [ $index < $ImageCount ] 
	Loop
		# Process each image
		Set Variable [ $FilePath ; Value: MBS("PhotoPicker.File"; $index) ] 
		Set Variable [ $Error ; Value: MBS("PhotoPicker.Error"; $index) ] 
		# 
		If [ Length ( $FilePath ) > 0 ] 
			New Record/Request
			If [ Right ( $FilePath; 5 ) = ".heic" ] 
				# special case for HEIC images -> we convert them to PNG
				Set Variable [ $Image ; Value: MBS( "Container.ReadImageFile"; $FilePath; "PNG"; "image.png") ] 
			Else
				# all other files get imported
				Set Variable [ $Image ; Value: MBS( "Container.ReadFile"; $FilePath) ] 
			End If
			Set Field [ ImagePicker::Picture ; $image ] 
			Commit Records/Requests [ With dialog: Off ] 
		End If
		# 
		# next
		Set Variable [ $index ; Value: $index + 1 ] 
		Exit Loop If [ $index  $ImageCount ] 
	End Loop
End If
Set Variable [ $Image ; Value: MBS( "PhotoPicker.Clear") ] 

Please try the new functions in MBS Plugin 12.5 or newer.

Link to comment
Share on other sites

×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.