Hi!
I want to use a date picker on the app and I figured I could just use the native Date Picker that Android provides.
So I google how to show the date picker and in the docs it has an example (Unity - Scripting API: AndroidJavaProxy)!
Great!
However, I want the date picker to only go back as far as 7 years and go up to this current date.
I tried modifying the code in the docs and came up with this:
TimeSpan span = selectedDate - minDate;
var activity = new AndroidJavaClass("com.unity3d.player.UnityPlayer").GetStatic<AndroidJavaObject>("currentActivity");
activity.Call("runOnUiThread", new AndroidJavaRunnable(() =>
{
AndroidJavaObject datePickerDialog = new AndroidJavaObject("android.app.DatePickerDialog", activity, new DateCallback(), selectedDate.Year, selectedDate.Month-1, selectedDate.Day);
AndroidJavaObject datePicker = datePickerDialog.Call<AndroidJavaObject>("getDatePicker");
datePicker.Call("setMinDate", span);
datePickerDialog.Call("show");
}));
however when I trigger this code, nothing happens (I’m building the apk file and loading it straight to the phone, so I don’t see any error messages or anything. Heck, I don’t even know how to build it so that I can!)
How should I go about this?
I apologize for my English. I will write via https://translate.google.ru.
The topic is probably not relevant, but still write a solution. Can someone come in handy)
Method selected date ClickPickDate:
public void ClickPickDate(){
//
var unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
var activity = unityPlayer.GetStatic<AndroidJavaObject>("currentActivity");
//
long maxDate = 0;
long minDate = 0;
// set min date
DateTime dateMin = new DateTime(2010, 1, 1, 0, 0, 0, DateTimeKind.Utc);
minDate = TimeUtils.totalMilliseconds(dateMin); // convert date to mills long
// set max date
DateTime dateMax = new DateTime(2018, 1, 1, 0, 0, 0, DateTimeKind.Utc);
maxDate = TimeUtils.totalMilliseconds(dateMax); // convert date to mills long
activity.Call("runOnUiThread", new AndroidJavaRunnable(() =>
{
AndroidJavaObject datePickerDialog = new AndroidJavaObject("android.app.DatePickerDialog", activity, new DateCallback(), selectedDate.Year, selectedDate.Month - 1, selectedDate.Day);
AndroidJavaObject datePicker = datePickerDialog.Call<AndroidJavaObject>("getDatePicker");
datePicker.Call("setMaxDate", maxDate);
datePicker.Call("setMinDate", minDate);
datePickerDialog.Call("show");
}));
}
Class TimeUtils:
public class TimeUtils {
private static readonly DateTime Jan1st1970 = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
//
public static long totalMilliseconds(DateTime _date){
return (long)(_date - Jan1st1970).TotalMilliseconds;
}
}