web-dev-qa-db-ja.com

実行中のコードの現在のOS /プラットフォームを知る方法(Android / iOS)

Xamarin.AndroidとXamarin.iOSを使用して、現在のOSを共有コードセクションに追加する必要があります。 enum、int、stringのいずれであっても、関係ありません。

私はこれを試しました:

System.Environment.OSVersion

これは常にいくつかのカーネルバージョン情報を含む「Unix」です。

Androidたとえば、

Android.OS.Build.VERSION

ただし、Android特定のコードセクションにある必要があります。共通ライブラリの現在のOSを知る方法はありますか?

27
Askolein

これを試すこともできますが、おそらく私が見つけた最良のソリューションです。

if(Device.RuntimePlatform == Device.iOS)
{
    //iOS stuff
}
else if(Device.RuntimePlatform == Device.Android)
{

}
46
maulik sakhare

DeviceInfo プラグインを使用しています。 Android, iOs, Windows Phone Silverlight, Windows Phone RT, Windows Store RT, Windows 10 UWPをサポートし、完全に機能します。

次のようにPCLで使用できます(プラグインをプラットフォームプロジェクトとPCLに追加する必要があります):

var platform = CrossDeviceInfo.Current.Platform;
    switch(platform){
        case Platform.iOS:
            // iOS
            break;
        case Platform.Android:
            // Android
            break; 
    }

この種のコードはPCLでは良い習慣ではありません。Dependency Injection(このプラグインはそれを使用)を使用してプラットフォーム固有の動作をカスタマイズすることをお勧めします。

5
jzeferino

リフレクションを使用して、Monotouch.Versionプロパティ(およびMfAに相当するもの:Android.OS.Build.VERSION)の値を取得してみます。呼び出しの1つは失敗し、もう1つは成功するはずです。そのため、リフレクションを使用する必要があります。これは、実際のランタイムチェック用です。

ただし、アプリは2回コンパイルされるため、コンパイル時にその値を修正できます。

#if MONOTOUCH
    var platform = "iOS"
#else
    var platform = "Android"
#endif
4