I built an application to scan items in our inventory and do the annual counting... Works great, on the computer. The aim is to have it on one of our surface 4 pro and run around with the barcode scanner and input the quantities. Works fine
As the app runs locally (wifi coverage too poor), storing data in SQLite, I have methods to sync the MySQL server. Works fine! But...
As every app, everything is closed controlled, and I use the official Alert dialogs to display the different confirmations/informations/errors. They don't respond to touch events! If I use a mouse, I can nicely click the buttons, but impossible to click them by touching!
As an example of a dialog:
public void syncServer() {
final Alert confirmation = new Alert(Alert.AlertType.CONFIRMATION);
confirmation.setTitle("Confirmation requise");
confirmation.setHeaderText("Synchroniser avec le serveur");
confirmation.setContentText("Voulez-vous envoyer les données au serveur? Attention, cette action remplacera l'entier des données distantes par vos données locales!!");
confirmation.initOwner(getPrimaryStage());
Optional<ButtonType> result = confirmation.showAndWait();
if (result.isPresent() && result.get() == ButtonType.OK) {
if (Mysql.getInstance().init(this)) {
...
}
}
}
This alert typically shows a dialog of type confirmation with two button, OK and cancel. None of them react to touch events...
Anybody already had that and could solve it?
Looking a bit further on Stackoverflow, well, 2 questions about it, one using custom dialogs and adding listeners to custom buttons... It's a bit of a hassle to implement custom buttons for each and every dialog in the app...
Related
I am developing an app for Android TV is it possible to know, on which TV my app is running or what action is performed on it?
Thank you.
To review your app's supported devices:
Sign in to your Play Console.
Select an app.
On the left menu, click
Release management > Device catalog. If you haven't already, review
and accept the Terms of Service.
Select the All, Supported, or
Excluded tabs. If you want to download a list of devices as a CSV
file, near the right side of the page, click Download device list.
For more infos:
https://support.google.com/googleplay/android-developer/answer/7353455
To track action performed on your app, you can use Fabric's Answers plug in.
Here is a sample code you'll need to add in your code to track events in Answers:
public void onKeyMetric() {
// TODO: Use your own string attributes to track common values over time
// TODO: Use your own number attributes to track median value over time
Answers.getInstance().logCustom(new CustomEvent("Video Played")
.putCustomAttribute("Category", "Comedy")
.putCustomAttribute("Length", 350));
}
For more infos:
https://fabric.io/kits/android/answers
My app uses Xamarin.Forms.Maps to display a map and also for geocoding. The map is displayed on a separate page when the user navigates to it from the main page. I use the geocoder to reverse geocode the current location so that I have the address. This is done from various places other than the map page.
When I run the app on a device (even in debug mode) the geocoder works right away in iOS and Android, but does not work in UWP. After I navigate to the map page and display the map, then go back to a different page to use the geocoder it starts working.
I saw a thread about the map not working with release build so I added the following code:
var laRendererAssemblies = new[] { typeof(Xamarin.Forms.Maps.UWP.MapRenderer).GetTypeInfo().Assembly };
Xamarin.Forms.Forms.Init(e, laRendererAssemblies);
//Xamarin.Forms.Forms.Init(e);
Xamarin.FormsMaps.Init("MyBingMapsKey");
This has not helped the issue with the Xamarin.Forms.Maps.Geocoder. I also tried creating an instance of Xamarin.Forms.Maps.Map in my main page, but that did not help either. Is there a way to prime the map component so that the Geocoder will work on a device? (My test device is ARM, but it happens when I run on Local
Machine (Win 10) too)
Following is a snippet of the call to the Geocoder (which works fine once the user has navigated to the Map page and back - and it works fine in iOS and Android - and as such I don't believe it is a problem with the code, but here it is):
public static async Task<Plugin.Geolocator.Abstractions.Position> Geocode(string address)
{
try
{
var loGeocoder = new Xamarin.Forms.Maps.Geocoder();
System.Diagnostics.Debug.WriteLine("Get Lat/Lon");
var lcolPositions = await loGeocoder.GetPositionsForAddressAsync(address);
if (lcolPositions != null)
After doing some research and ensuring that your geodecode class being static wouldn't mess with the async/await pattern in the UWP build. I've come across a few references to this particular problem with the built in Forms.Map geodecoder elsewhere, not just for UWP it has also been noted for android‡.
I took some time to have a look at one of our current cross-platform applications that we have in the app stores, and according to our internal documentation we switched out both the xamarin.forms map, and the geodecoder for custom ones.
The plugin that we use for our cross-platform application is the 'GelocatorPlugin' created by james montemagno, and can be found here.
It can be added to your project as a Nuget package if you prefer, and the implementation of it is very similar to the default one, so there's very little code to change. The primary benefit is that the UWP element of the geodecode plugin has been modified to take into account windows advanced tracking scenarios (details found here).
It should be a lot more stable than the one your using, once installed you simply use it like so:
Reverse Geocoding
Based on a location that is passed in, thi swill grab a list of
addresses.
UWP requires a Bing Map Key, which you can acquire by reading this
piece of documentation.
try
{
var addresses = await locator.GetAddressesForPositionAsync (position, string mapKey = null);
var address = addresses.FirstOrDefault();
if(address == null)
Console.WriteLine ("No address found for position.");
else
Console.WriteLine ("Addresss: {0} {1} {2}", address.Thoroughfare, address.Locality, address.Country);
}
catch(Exception ex)
{
Debug.WriteLine("Unable to get address: " + ex);
}
‡ Links to similar problems - Link 1, Link 2
resolved after added following lines in APP.xaml.cs (UWP project)
Xamarin.FormsMaps.Init("bingmapkey");
Windows.Services.Maps.MapService.ServiceToken = "bingmapkey";
I am working with offline support of Meteor Application. I have researched about this support but all are giving one answer 'ground:db'. I looked into that solution its really nice effort by #raix. I started with that package, Its already working project so first task i have done that all collection i have grounded with following syntax
var Users = Meteor.users;
if(Meteor.isClient){
SmtGroundCollections.Users = Ground.Collection(Users);
}
After that i have tried with my offline application but still its showing loading and i am not getting my dom elements after that i have tried with that all waitOn subscription i have put on condition
if(Meteor.status().connected){
/* my subscriptions */
}
After that i am able to see my dom and if i visited that page when i am online then after i am going offline i am able to see my data.
Now i am explaining my problems.
1) When i am calling my methods its not updating my ground collection if i am offline. I used below code for resume my methods
if(Meteor.isClient){
Ground.methodResume([
'addProfie',
' editProfile' ,
' deleteProfile ' ,
]);
}
Its working fine when i am coming from offline to online its syncing my data to server but i am not able to immediate effect.
2) If i want full application offline then i need to visit every page of my mobile application and then i can get that data in offline but its not possible so i want one centralise thing where i will press button and i can grounded my all data which i want offline.
So can anyone help me to solve above problem
Thanks in advance
This is UWP code for getting BLE devices. Why I get bleDevice == null for some devices? I didn't find any documentation which explains that.
var devices = await DeviceInformation.FindAllAsync(BluetoothLEDevice.GetDeviceSelector());
foreach (DeviceInformation di in devices)
{
Debug.WriteLine(di.Name);
BluetoothLEDevice bleDevice = await BluetoothLEDevice.FromIdAsync(di.Id);
if (bleDevice == null) {
Debug.WriteLine("--- NULL ----");
continue;
}
Debug.WriteLine(bleDevice.Name);
}
I noticed that I get bleDevice != null for BLE devices that HAVE exclamation mark with STATUS_DEVICE_POWER_FAILURE in device manager in Windows.
I get bleDevice == null for BLE devices that DO NOT HAVE exclamation mark in device manager.
I got the same problem. the previous answer from Chi Lee is in fact good but not enough detailed on how to do it (for non-experts;-) ).
Here the detailed process (assuming you have a c# project under Microsoft visual studio):
Double click the properties field under your project: this will open a new tab
in the opened tab, select Application in the left then click Package Manifest... button
A new tab named "package.appxmanifest" is opened. Select, inside it, the Capabilities tab
Check Bluetooth field under capabilities
Save and recompile your project.
The BluetoothLEDevice.FromIdAsync(di.Id) will no more return null, provided that you already have paired devices (either in your program or manually in Windows .
You have to add Bluetooth capability in your appxmanifest file.
I followed this tutorial:
https://msdn.microsoft.com/en-us/library/windows/apps/hh202967(v=vs.105).aspx
It works, but the toast that appears on the phone screen contains all of this:
Received Toast 4:05 PM:
wp:Text1: Please
wp:Text2: Help!
wp.Param: /Page2.xaml?
NavigatedFrom=Toast Notification
I would like for the toast to only contain text1 and text2. In this instance I only want "Please Help!" to appear. I've looked at everything on MSDN and everywhere else on google and there is nothing on it.
You should see what you want if the demo app isn't running when the toast arrives: an alert with "Please Help!" will show at the top of the screen.
If the app is running then the app's ShellToastNotificationReceived event fires instead of the toast appearing on the phone. This lets the app decide what to show. The demo code parses the received data and explicitly adds each key and value to a string and shows it in a MessageBox. This is purely for demonstration. A real app would never do that.
Typically a real app would find the interesting information and display it in-line rather than in a MessageBox, but the details will depend on the app.
If you want to display the contents of wp:Text1 and wp:Text2 in a TextBlock you can create the string something like:
StringBuilder message = new StringBuilder();
message.AppendFormat("{0} {1}",e.Collection["wp:Text1"],e.Collection["wp:Text2"]);
MyTextBlock.Text = message;
In production you'd probably want to verify that wp:Text1 and wp:Text2 existed, etc.