During the AMIS ADF Masterclass I showed how to take a picture from within an ADF Mobile application, attach it to an Email and send that email out to several recipients. To top it of, I even added the GPS coordinates to the subject, so you know where the picture was taken. And all of that with the push of one single button. Sounds complicated ? Well actually it is very simple.
There are two ways to interact with device services. One is by using the page Definition, the second is by using the API.I decided not to use the pageDef, but to invoke the device datacontrol from java by using the API. Then it is also possible to invoke multiple actions in one java method. In this case I take a picture, get the coordinates and send an email.
How to take a picture ?
Taking a picture is easy. Just call the getPicture() method, and make sure (for this use case) to set Destination Type to File.
That takes care of taking the picture.
How to get the current coordinates ?
By invoking getCurrentPosition it is very easy to get the GPS coordinates. Simply call the getCurrentPosition() method, and you will get the current coordinates. The coordinates are refreshed every 60 seconds.
How to send an email ?
First take a look at the signature of the sendEmail() method. This immediately makes clear how to proceed from here...
The signature explains how it works. All that is needed are Strings. If you want to use multiple recipients, you need to separate them by comma's. The final question is: "how to attach the image that was just created ?".
Attaching the image.
You can do two things. Either use the String that is returned by calling getPicture(), or directly attach the file from the Temporary Directory which I do in this case.
The content and bcc in the above code sample are Strings that can be set in the method.
Putting it all together
The only thing you need is a button to invoke a method in the bean.
The method executeLogic() does the magic by invoking all three methods described above.
Push the button, the camera is invoked, and after that, the email client is invoked, showing an email with the attachment, the content (including GPS coordinates) and the recipients.
There are two ways to interact with device services. One is by using the page Definition, the second is by using the API.I decided not to use the pageDef, but to invoke the device datacontrol from java by using the API. Then it is also possible to invoke multiple actions in one java method. In this case I take a picture, get the coordinates and send an email.
How to take a picture ?
Taking a picture is easy. Just call the getPicture() method, and make sure (for this use case) to set Destination Type to File.
public String getPicture(){
//destinationType = 1 so that the image is returned as a filename
String theImage = DeviceManagerFactory.getDeviceManager().getPicture(
100
,DeviceManager.CAMERA_DESTINATIONTYPE_FILE_URI
,DeviceManager.CAMERA_SOURCETYPE_CAMERA
, false
,DeviceManager.CAMERA_ENCODINGTYPE_PNG
,0
,0);
return theImage;
}
That takes care of taking the picture.
How to get the current coordinates ?
By invoking getCurrentPosition it is very easy to get the GPS coordinates. Simply call the getCurrentPosition() method, and you will get the current coordinates. The coordinates are refreshed every 60 seconds.
public Location getPosition(){
Location currentPosition = DeviceManagerFactory.getDeviceManager().getCurrentPosition(
60000
, true);
return currentPosition;
}
How to send an email ?
First take a look at the signature of the sendEmail() method. This immediately makes clear how to proceed from here...
DeviceManagerFactory.getDeviceManager().sendEmail(
java.lang.String to
,java.lang.String cc
,java.lang.String subject
,java.lang.String body
,java.lang.String bcc
,java.lang.String attachments
,java.lang.String mimeTypes)
The signature explains how it works. All that is needed are Strings. If you want to use multiple recipients, you need to separate them by comma's. The final question is: "how to attach the image that was just created ?".
Attaching the image.
You can do two things. Either use the String that is returned by calling getPicture(), or directly attach the file from the Temporary Directory which I do in this case.
public void sendEmail(String attachment, Location here){
String directoryPathRoot = AdfmfJavaUtilities.getDirectoryPathRoot(0); //TemporaryDirectory
String content = "Amis wishes you all the best for 2013. This email contains an image as attachment. ";
content = content + "The picture was taken at: latitude=" + here.getLatitude() +
", longitude=" + here.getLongitude();
attachment = directoryPathRoot+"/Pic.png";
DeviceManagerFactory.getDeviceManager().sendEmail("my.mail@company.org"
, null
, "Merry Xmas and a Happy new year"
, content
, bcc
, attachment
, "image/jpg");
The content and bcc in the above code sample are Strings that can be set in the method.
Putting it all together
The only thing you need is a button to invoke a method in the bean.
amx:commandButton text="Take Picture" id="cb3"
actionListener="#{pageFlowScope.interactionBean.executeLogic}"
The method executeLogic() does the magic by invoking all three methods described above.
public void executeLogic(ActionEvent actionEvent) {
String att = getPicture();
Location whereAmI = getPosition();
sendEmail(att, whereAmI);
}
Push the button, the camera is invoked, and after that, the email client is invoked, showing an email with the attachment, the content (including GPS coordinates) and the recipients.
Comments
posts and extra information, is there any other site which offers
such information in quality?
Feel free to visit my web site; Jual GPS Tracker
Please help.
Do you have a step by step tutorial on how to take a picture and attach it to an email.
If you do, could you please share with us.
Thank you,
Brian
Have one doubt for attaching the image from temporary directory, you have hard coded the image name as Pic.jpg How do you know your phone stores the image with that name? I mean how to get the dynamic image name into the code? Is there any control in saving the image with the custom name.
looking for your answer.
Thanks
Have one doubt for attaching the image from temporary directory, you have hard coded the image name as Pic.jpg How do you know your phone stores the image with that name? I mean how to get the dynamic image name into the code? Is there any control in saving the image with the custom name.
looking for your answer.
Thanks