Как получить сигнал, чтобы зарегистрироваться на Tizen-носимых 4.0? - PullRequest
0 голосов
/ 24 января 2019

Я пытаюсь настроить приложение для SM-R800, которое можно носить с помощью tizen 4.0 (часы Samsung Galaxy), которое будет отображать касание при регистрации в дополнение к отображению внешнего освещения и давления окружающей среды.(Это сделано в C #)

Я пытался использовать класс Window, чтобы попытаться передать мои аргументы события касания, потому что не похоже, что класс "Просмотр" способен сделать это в соответствии сдоступная документация Tizen.

//using System;
//using System.Collections.Generic;
//using System.Linq;
//using System.Text;
// using ElmSharp; can't be used because it is redundant with Xamarin    forms namespace
using Xamarin.Forms;
using Tizen.Wearable.CircularUI.Forms;
using Tizen.Sensor;
using Tizen.NUI;

namespace TizenWearableApp6
{

    public class App : Application
    {
        LightSensor sensor;
        Label textlabel;
        PressureSensor sensor2;
        Label barometer_label;
        //Touch touch;

        public Vector2 startPos;
        public Vector2 direction;
        //Label m_Text;

        protected override void OnStart()
        {
            //base.OnCreate();
            //Initialize();
        }

        public App()
        {

            /*
            Window window = Window.Instance;
            window.TouchEvent += WindowTouched;
            //touch = new Touch(); //this line has to be in a method like "public App()"


            m_Text = new Label
            {
                HorizontalTextAlignment = TextAlignment.Center
            };

            void WindowTouched(object sender, Window.TouchEventArgs e)
            {
                m_Text.Text = "I have been touched!";
            } */

            if (PressureSensor.IsSupported)
            {
                sensor2 = new PressureSensor(); //instantiate HERE
                barometer_label = new Label
                {
                    HorizontalTextAlignment = TextAlignment.Center
                };

                sensor2.Start(); //Barometer sensor
                sensor2.DataUpdated += OnDataUpdated2; //Subscribed event handler (OnDataUpdated2) to event (DataUpdated)

                void OnDataUpdated2(object sender, PressureSensorDataUpdatedEventArgs e) // event handler for humidity
                {
                    barometer_label.Text = "Ambient pressure Level: " + e.Pressure;
                }
            }
            else
            {
                barometer_label = new Label()
                {
                    HorizontalTextAlignment = TextAlignment.Center,
                    Text = "Does not exist"
                };
            }

            //-----------------Light Sensor------------------------
            sensor = new LightSensor(); //"new" because I'm instantiaing a new object of the light sensor class

            textlabel = new Label
            {
                HorizontalTextAlignment = TextAlignment.Center
            };

            sensor.Start(); //Light sensor
            sensor.DataUpdated += OnDataUpdated1; //Subscribed event handler (OnDataUpdated1) to event (DataUpdated)

            void OnDataUpdated1(object sender, LightSensorDataUpdatedEventArgs e) //event handler
            {
                textlabel.Text = "Light level: " + e.Level;
            }

            // The root page of your application
            MainPage = new CirclePage
            {
                Content = new StackLayout
                {

                    VerticalOptions = LayoutOptions.Center,
                    Children = {
                        textlabel,
                        barometer_label,
                        //m_Text
                    }
                }
            };
        }


        /*  protected override void OnStart()
          {
              // Handle when your app starts

          } */

        protected override void OnSleep()
        {
            // Handle when your app sleeps
        }

        protected override void OnResume()
        {
            // Handle when your app resumes
        }
    }
} 

С помощью приведенного выше кода я закомментировал то, что пытался (безуспешно), и просто оставил части своего кода, которые работают.Я ожидаю увидеть обновления в реальном времени окружающего света, давления и ожидаю строку, которая говорит: «Я был тронут!»каждый раз, когда я нажимаю на часы.

То, что я на самом деле получаю (при условии, что я просто использую то, что у меня есть выше), это обновление в реальном времени окружающего света и давления окружающей среды, но в тот момент, когда я раскомментирую свой класс Window, я получаю «Out offrame "error и если я ТОЛЬКО раскомментирую свою метку m_Text в дочерних элементах VerticalOptions, и когда я объявляю" Label m_Text ", я получаю ошибку ошибки сегментации.

Обратите внимание, что некоторые изкомментарии могут показаться произвольными, потому что я оставил некоторые вещи, которые я пробовал ранее, и не обязательно означает, что я ВСЕ раз не прокомментировал.

Наконец, было бы полезно узнать, что я новичок в C #, Tizen и Microsoft Visual Studio, поэтому я обязательно задам много вопросов для начинающих.

1 Ответ

0 голосов
/ 13 марта 2019

Чтобы начать с того, что было бы неправильно понято, существует множество различных API, доступных при создании пользовательского интерфейса приложений Tizen .NET.Некоторые из них до сих пор не очень хорошо документированы.Чтобы назвать несколько (что мы видим в окне нового проекта VisualStudio):

  1. Xamarin.Forms : богатый набор кроссплатформенных APIтакже доступно для Android, iOS, UWP и Tizen.
  2. Tizen.Wearable.CircularUI : расширение Xamarin.Forms, которое доступно только при разработке дляTizen Носимый с.
  3. ElmSharp-Beta : оболочка AC # традиционной нативной платформы Tizen (Elementary), которая поставляется с ограниченной поддержкой ишироко используется для внутренней реализации.
  4. Tizen.NUI : новая платформа C # GUI, созданная поверх Tizen DALi (встроенная графическая библиотека).

Итак, вернемся к вопросу.Поскольку ваш проект основан на Xamarin.Forms (и Tizen.Wearable.CircularUI), вы можете обратиться к этому руководству с официального сайта для обработки пользовательских жестов.Например, вы можете просто зарегистрировать экземпляр TapGestureRecognizer в своем компоненте StackLayout следующим образом (вместо того, чтобы импортировать API Tizen.NUI).

    var layout = new StackLayout
    {
        VerticalOptions = LayoutOptions.Center,
        Children = { textlabel, barometer_label, m_Text }
    };

    TapGestureRecognizer tapGestureRecognizer = new TapGestureRecognizer();
    tapGestureRecognizer.Tapped += (sender, e) =>
    {
        m_Text.Text = "I have been touched!";
    };
    layout.GestureRecognizers.Add(tapGestureRecognizer);

    MainPage = new CirclePage
    {
        Content = layout
    };

Надеюсьэто помогает и нравится разрабатывать носимые приложения.

...