2016-07-21 4 views
2

私は非アクティブ検出に取り組んでいます。Xamarin.FormsはiOSのSendEventをオーバーライドするのと同じです

UIApplicationをサブクラス化し、SendEventをオーバーライドしてhereとすると、iOSで正常に機能しました。

私はこれをiOSとAndroidの両方で個別に実装できますが、タッチイベントをインターセプトしてタイマーをリセットすることで、クロスプラットフォームのフォームアプローチを使用したいと考えています。私はむしろすべての私のページにタッチイベントハンドラを追加する必要はありません。

答えて

2

私はクロスプラットフォームのアプローチを見つけることができませんでした。私はタイマー関連の情報をコアフォームプロジェクトに残し、iOSとAndroid用にタッチイベントハンドラを個別に実装することでこれを達成できました。私は、OPのリンクに概説されているようにiOSのタッチイベントを処理しましたが、Androidではメソッドの存在により、Activityをサブクラス化するアプローチをとっていました。

最初は、Xamarinで、Xamarinで使用するすべてのページにサブクラス化されたActivityを使用しなければならないと思っていましたが、間違いました。 XamarinフォーラムのAdamMeaneyは、Androidのアクティビティのサブクラス化に関して、Android側のためのソリューションを提供するのを助けることができました。 XamarinはXamarin.Forms.Platform.Android.FormsAppCompatActivityを継承したActivityを1つだけ使用しています。私はDroidプロジェクトでXamarinが提供したMainAcitivtyを使用しました。そこから、OnUserInteraction()をオーバーライドすることは非常に簡単であることが判明しました。

public override void OnUserInteraction() 
{ 
    base.OnUserInteraction(); 
    //Do other stuff 
} 
0

新しいタッチイベントが発生するたびにプラットフォーム側で実際に行う必要があることは通知されるようです。私が何かが欠けていない限り、PCLのコアフォームプロジェクトですべてのタイマーを実行し、タッチが検出されたときに実行されるプラットフォーム固有のコードからそのコードを呼び出すことができます。

Androidの場合(私は確認していませんでしたが、そう仮定します)、デバイス全体のタッチを扱う方法は似ています。そうすれば、そのイベントハンドラを実装するだけですあなたはiOSのためにして、あなたのFormsコアコードを呼び出してタイマーを処理します。

説明:プラットフォーム側では、タッチイベントをグローバルに処理し、Formsコアでコードを呼び出して、タイマー機能を一度実装するだけで済みます。それとも、私が何かを見逃していない限り、それは見えるでしょう。

あなたはXamarinフォームのための機能要求を作りたい場合は、Xamarinのユーザーボイスのページでそうしてください。xamarin.uservoice.com

私はデバイスを扱う...フォームがちょうど上で概説したように実行する必要のある疑い各プラットフォームで幅広く触れてから、タッチが発生するたびに呼び出されるFormsコアコード内に仮想メソッドを持ちます。

+0

はい、そうする必要があります。プラットフォーム固有のタッチイベントハンドラにジャンプするのではなく、すべてのプラットフォームのタッチイベントを処理するForms内でオーバーライドできるメソッドが存在することを期待していました。 –