記事一覧

バイブレーションを振動させる方法 | Xamarin.Forms


今回はXamarin.Formsでバイブレーションを振動させる方法についてご紹介いたします。
iOSとAndroidで同じ呼び出しコードにするため、毎度お馴染みDependencyServiceでの記述になりますが、Androidではパターンや繰り返しで鳴らすことができますが、iOSでは決まった形式でしか振動させられません。


xamarin_vibrate_01.png



前提条件
・Windows10 Pro 64Bit
・Visual Studio 2015 Community Update3
・Xamarin 4.7.9.45 (NuGet Xamarin.Forms 2.4.0.282)
・macOS Sierra 10.12.6 / Xcode9 / Xamarin.iOS 11.0.0.0



1.PCLの記述方法

PCLプロジェクト内にDependencyServiceで呼び出すためのインターフェースを配置します。
IDeviceService.cs
namespace AppName.Services
{
//DependencyServiceから利用する
public interface IDeviceService
{
void PlayVibrate();
}
}



2.Androidの実装方法

AndroidManifest.xmlに以下のパーミッションを追加します。

<uses-permission android:name="android.permission.VIBRATE"/>

次にAndroidプロジェクト内にDeviceServiceクラスを配置します。

DeviceService.cs
using System;
using Android.Content;
using Xamarin.Forms;
using AppName.Services;
using AppName.Droid.Services;
[assembly: Dependency(typeof(DeviceService))]
namespace AppName.Droid.Services
{
public class DeviceService: IDeviceService
{
//パーミッションの設定 "android.permission.VIBRATE"が必要です。
public void PlayVibrate()
{
var obj = Forms.Context.GetSystemService(Context.VibratorService);
Vibrator vibrator = (Vibrator)obj;
vibrator.Vibrate(1000);
}
}
}



3.iOSの実装方法

iOSプロジェクト内にDeviceServiceクラスを配置します。

DeviceService.cs
using AudioToolbox;
using Xamarin.Forms;
using AppName.iOS.Services;
using AppName.Services;
[assembly: Dependency(typeof(DeviceService))]
namespace AppName.iOS.Services
{
public class DeviceService: IDeviceService
{
public void PlayVibrate()
{
SystemSound.Vibrate.PlayAlertSound();
}
}
}



4.使用方法

PCLプロジェクトの中の任意のページに記述します。
TestPage.xaml.cs
void OnButtonVibrateClick()
{
    DependencyService.Get<IDeviceService>().PlayVibrate();
}




最後までお読みいただきありがとうございます。
当ブログの内容をまとめた Xamarin逆引きメニュー は以下のURLからご覧になれます。
http://itblogdsi.blog.fc2.com/blog-entry-81.html


関連記事

コメント

こんにちは。
良記事ありがとうございます!

しかし…私の実力不足でうまくいきません。
この通りにやったのですが、ビルドに失敗するようになってしまいます。

また、Androidのほうに追加したクラスを編集する時、補完機能がほとんど働いていませんでした。

なにか他に必要な設定などはないでしょうか?もしくは初心者がやりそうな間違いはあるでしょうか?

ちなみにXamarin.fromsからプログラミングを始めたのでネイティブの知識が足りないとこで発生する間違いかもしれません。自分でもさんざん調べ回りましたがわかりませんでした……
Re: タイトルなし
当ブログをご覧いただき誠にありがとうございます。

基本的に当ブログでは、記載してあるコードのままコピペして使用できるように構成してございます。
(※名前空間のAppNameの箇所はご自身のソリューション名またはアプリ名等に変更して頂く必要はあります。)
従いまして、他に必要な設定はありません。

ただし、該当記事に関係のない事項で、例えばXamarin.Formsでビルドできる状態とか、ソリューションの基本的な設定につきましては割愛しおります。(当ブログの他の記事等でご紹介しております。逆引きメニューよりご確認ください。)

けしごむさんの場合は、ビルドが通らない状態という事でよろしいでしょうか。
その場合は、おそらく名前空間が正しく構成されていない可能性が高いと考えます。
お手数ではございますが、再度PCLとAndroidとiOSで全てご自身のソリューションのフォルダ構成に合っているかどうかをご確認頂くと良いでしょう。

また、今回ご自身のソリューションに追加したソースを全てコメントアウトして、ビルドが通ることを確認してみるのも切り分けの一つかもしれません。

以上、よろしくお願いいたします。
できました…!
ブログの内容には全く問題がなかったです!
本当に申し訳ないですm(__)m

名前空間は問題なかったため、言われた通りコメントアウトを試した所、それでもビルドに失敗したのでプロジェクトを作りなおしたらうまくいきました。
補完もいつものようにバリバリ働いてくれました。

丁寧な対応ありがとうございました!

しかし…このプロジェクトの作りなおしは2回目ですし、他のプロジェクトでも同じ事が1回あったので不安です。

・突然ビルドに失敗するようになる(全てコメントアウトしても)
・補完がきかなくなる

という症状になにか心当たりはありませんか?それだけ追加でお聞きしたいです。
Re: タイトルなし
無事に動作したようで良かったです。

ちなみにビルドはよくできなくなりますよ。
基本的にはクリーン&リビルドです。

よくあるのが、NuGetパッケージのXamarin.FormsとXamarin本体のバージョンをアップデートまたはダウングレードした際に、binフォルダやobjフォルダまたは.vsフォルダがおかしくなり、フォルダを削除してからリビルドしないといけない不具合が複数回ありました。
特に他のNuGetパッケージもインスト&アンインスト時には因果関係の為に勝手にバージョンアップされてはいけないモジュールもありますのでそこでおかしくなったりはします。
そのあたりのエラーにつきましては当ブログの記事で対応方法をご紹介しておりますので、以下のURLからご参考くださると良いでしょう。
itblogdsi.blog.fc2.com/blog-entry-81.html#p14

また、Visual Studio は標準でGitのソース管理に対応しておりますので、Gitを設定すれば編集したことによる影響が分かるようになりますので、チェックアウトされているソースの差分を見るとどの操作で影響が出ているかどうかも確認ができるようになると思います。

私はさらに念を入れてソリューションフォルダ丸ごとバックアップしています。
戻すことも簡単になります。Gitから戻すとファイルごとに確認しながらとなりますのでそれも手間かと。

以上、よろしくお願いいたします。
うわー!そうだったんですか!
なにからなにまでありがとうございます!
エラー対応記事もこんなにあるんですね!
参考にします!
ありがとうございました。
コメントの投稿

カテゴリ別記事一覧

広告

プロフィール

石河 純


著者名 :石河 純
自己紹介:素人上がりのIT技術者。趣味は卓球・車・ボウリング

IT関連の知識はざっくりとこんな感じです。
【OS関連】
WindowsServer: 2012/2008R2/2003/2000/NT4
Windows: 10/8/7/XP/2000/me/NT4/98
Linux: CentOS RedHatLinux9
Mac: macOS Sierra 10.12 / OSX Lion 10.7.5 / OSX Snow Leopard 10.6.8
【言語・データベース】
VB.net ASP.NET C#.net Java VBA
Xamarin.Forms
Oracle10g SQLServer2008R2 SQLAnywhere8/11/16
ActiveReport CrystalReport ReportNet(IBM)
【ネットワーク関連】
CCNP シスコ技術者認定
Cisco Catalyst シリーズ
Yamaha RTXシリーズ
FireWall関連
【WEB関連】
SEO SEM CSS IIS6/7 apache2

休みの日は卓球をやっています。
現在、卓球用品通販ショップは休業中です。