none
テザリングの NetworkOperatorTetheringManager クラスについて

    質問

  • こんにちは、

    windows 10 mobileのmobilehotspot機能を検証してみたいですが、

    mobilehotspotの関連APIである NetworkOperatorTetheringManager クラスでは携帯電話事業者のみ利用できるの話が聞きました、

    NetworkOperatorTetheringManagerクラスを使うことできるでしょうかと確認したいです。

    よろしくお願いいたします。



    2016年11月22日 2:25

回答

  • こんにちは。

    以前は制限があったようですが、現在はアプリケーションの制限は無いようです。
    ただし、アプリケーションマニフェストでwiFiControlの設定が必要です。

    <Capabilities>
      <DeviceCapability Name="wiFiControl"/>
    </Capabilities>

    2016年11月22日 10:44
    モデレータ
  • Windows 10 Mobileでモバイルホットスポットが作成されるところまで確認しました。

    private async void Button_Click(object sender, RoutedEventArgs e)
    {
        var tetheringManager = NetworkOperatorTetheringManager.CreateFromConnectionProfile(
                                    NetworkInformation.GetInternetConnectionProfile()
                                    );
        
        string AP_SSID = txtSSID.Text;
        string AP_PASS = txtPASS.Text;
        var accessPointConfig = new NetworkOperatorTetheringAccessPointConfiguration()
        {
            Ssid = AP_SSID, Passphrase = AP_PASS
        };
        
        await tetheringManager.ConfigureAccessPointAsync(accessPointConfig);
        
        await tetheringManager.StartTetheringAsync();
    }
    http://studio-geek.com/archives/1031


    2016年11月22日 16:46
    モデレータ
  • なるほどー、カレントの構成を取得すればいけるようです。

    private async void Button2_Click(object sender, RoutedEventArgs e)
    {
        tetheringManager = NetworkOperatorTetheringManager.CreateFromConnectionProfile(
                                    NetworkInformation.GetInternetConnectionProfile()
                                    );
        tetheringManager.GetCurrentAccessPointConfiguration();
        await tetheringManager.StopTetheringAsync();
    }

    2016年11月25日 11:42
    モデレータ
  • Windows10とWindows10Mobileで確認しましたが問題は発生しませんでした。

    Windows10デスクトップPCから確認しても同じ問題が発生しますか。
    発生するのであればコードの問題かもしれませんが、発生しないのであればWindows10Mobileに起因した問題かもしれません。

    例えば、ネットワーク構成が原因でNetworkOperatorTetheringManagerインスタンスが取得できていない、など。

    いずれにせよ、どういう環境でどういうオペレーションを起こした時に、何がNullになっているのか
    もう少し掘り下げれますか。

    2016年11月27日 7:50
    モデレータ

すべての返信

  • こんにちは。

    以前は制限があったようですが、現在はアプリケーションの制限は無いようです。
    ただし、アプリケーションマニフェストでwiFiControlの設定が必要です。

    <Capabilities>
      <DeviceCapability Name="wiFiControl"/>
    </Capabilities>

    2016年11月22日 10:44
    モデレータ
  • こんにちは。

    以前は制限があったようですが、現在はアプリケーションの制限は無いようです。
    ただし、アプリケーションマニフェストでwiFiControlの設定が必要です。

    <Capabilities>
      <DeviceCapability Name="wiFiControl"/>
    </Capabilities>

    コメントありがとうございます。

    機能の宣言を追加すればよいですよね、

    ちなみに、モバイルホットスポットのサンプルコードはどこからみられるでしょうか?

    ご教示お願い致します。


    2016年11月22日 11:14
  • こんにちは。

    以前は制限があったようですが、現在はアプリケーションの制限は無いようです。
    ただし、アプリケーションマニフェストでwiFiControlの設定が必要です。

    <Capabilities>
      <DeviceCapability Name="wiFiControl"/>
    </Capabilities>

    コメントありがとうございます。

    機能の宣言を追加すればよいですよね、

    ちなみに、モバイルホットスポットのサンプルコードはどこからみられるでしょうか?

    ご教示お願い致します。


    度々で申し訳ございません、一点だけ確認させていただきます。

    <DeviceCapabilitu Name="wiFiControl">

    "wiFiControl"の定義では、「デバイス機能を使うと、アプリはスキャンを実行して、Wi-Fi ネットワークに接続することができます。」となりますが、

    テザリングのようにmobile端末でネットワークを生成することができますでしょうか?

    よろしくお願い致します。

    2016年11月22日 11:25
  • Windows 10 Mobileでモバイルホットスポットが作成されるところまで確認しました。

    private async void Button_Click(object sender, RoutedEventArgs e)
    {
        var tetheringManager = NetworkOperatorTetheringManager.CreateFromConnectionProfile(
                                    NetworkInformation.GetInternetConnectionProfile()
                                    );
        
        string AP_SSID = txtSSID.Text;
        string AP_PASS = txtPASS.Text;
        var accessPointConfig = new NetworkOperatorTetheringAccessPointConfiguration()
        {
            Ssid = AP_SSID, Passphrase = AP_PASS
        };
        
        await tetheringManager.ConfigureAccessPointAsync(accessPointConfig);
        
        await tetheringManager.StartTetheringAsync();
    }
    http://studio-geek.com/archives/1031


    2016年11月22日 16:46
    モデレータ
  • Windows 10 Mobileでモバイルホットスポットが作成されるところまで確認しました。

    private async void Button_Click(object sender, RoutedEventArgs e)
    {
        var tetheringManager = NetworkOperatorTetheringManager.CreateFromConnectionProfile(
                                    NetworkInformation.GetInternetConnectionProfile()
                                    );
        
        string AP_SSID = txtSSID.Text;
        string AP_PASS = txtPASS.Text;
        var accessPointConfig = new NetworkOperatorTetheringAccessPointConfiguration()
        {
            Ssid = AP_SSID, Passphrase = AP_PASS
        };
        
        await tetheringManager.ConfigureAccessPointAsync(accessPointConfig);
        
        await tetheringManager.StartTetheringAsync();
    }


    Tak1wa 様

    ご回答誠にありがとうございます。

    助かりました。

    追加質問で申し訳ございません、

    別のクラスでStopすることができますか?

    トグルのoffによりテザリングをきりたいが、

    ご教示お願い致します。


    2016年11月25日 5:13
  • こんにちは。

    出先のため試せてませんが、以下のメソッドでstopできそうですが如何でしょう。

    await tetheringManager.StopTetheringAsync();

    2016年11月25日 6:25
    モデレータ
  • こんにちは。

    出先のため試せてませんが、以下のメソッドでstopできそうですが如何でしょう。

    await tetheringManager.StopTetheringAsync();

    Tak1wa 様

    早速のご返信ありがとうございます。

    tetheringManagerの名前解決にはご提供していただいた

    var tetheringManager = NetworkOperatorTetheringManager.CreateFromConnectionProfile(
                                      NetworkInformation.GetInternetConnectionProfile()
                                      );

    コードを入れてみましたが、動作がうまくできず、例外に投げしてしまったです。

    こちらでまたネットワークを生成することになると思いますが、

    今のテザリングネットワークを呼び出して、クローズする方法を教えていただけませんでしょうか?


    2016年11月25日 6:40
  • こんな感じで構成したアクセスポイントのインスタンスをメンバーに保持した場合はどうでしょうか。

    private NetworkOperatorTetheringManager tetheringManager = null;
    
    private async void Button_Click(object sender, RoutedEventArgs e)
    {
        tetheringManager = NetworkOperatorTetheringManager.CreateFromConnectionProfile(
                                    NetworkInformation.GetInternetConnectionProfile()
                                    );
        
        string apSsid = txtSSID.Text;
        string apPass = txtPASS.Text;
        var accessPointConfig = new NetworkOperatorTetheringAccessPointConfiguration()
        {
            Ssid = apSsid, Passphrase = apPass
        };
        
        await tetheringManager.ConfigureAccessPointAsync(accessPointConfig);
        
        await tetheringManager.StartTetheringAsync();
    }
    
    private async void Button2_Click(object sender, RoutedEventArgs e)
    {
        await tetheringManager.StopTetheringAsync();
    }
    2016年11月25日 6:50
    モデレータ
  • こんな感じで構成したアクセスポイントのインスタンスをメンバーに保持した場合はどうでしょうか。

    private NetworkOperatorTetheringManager tetheringManager = null;
    
    private async void Button_Click(object sender, RoutedEventArgs e)
    {
        tetheringManager = NetworkOperatorTetheringManager.CreateFromConnectionProfile(
                                    NetworkInformation.GetInternetConnectionProfile()
                                    );
        
        string apSsid = txtSSID.Text;
        string apPass = txtPASS.Text;
        var accessPointConfig = new NetworkOperatorTetheringAccessPointConfiguration()
        {
            Ssid = apSsid, Passphrase = apPass
        };
        
        await tetheringManager.ConfigureAccessPointAsync(accessPointConfig);
        
        await tetheringManager.StartTetheringAsync();
    }
    
    private async void Button2_Click(object sender, RoutedEventArgs e)
    {
        await tetheringManager.StopTetheringAsync();
    }

    Tak1wa 様

    いつもありがとうございます。

    早速検証してみました、再び例外が発生しています、

    また、ホットスポットのONとOFF状態の確認には何のAPIを使えばよろしいでしょうか?

    何度も申し訳ございません、ご教示お願いいたします。



    2016年11月25日 7:21
  • tetheringManager.TetheringOperationalState
    でON/OFF確認できないでしょうか。
    2016年11月25日 8:27
    モデレータ
  • tetheringManager.TetheringOperationalState
    でON/OFF確認できないでしょうか。

    Tak1wa様

    ご回答ありがとうございます、

    TetheringOperationalStateを確認いたしました、

    取得した0と1値はonとoffの状態を表示できます、ありがとうございます。

    申し訳ございませんが、ホットスポットのStopの名前解決の方は教えていただけませんでしょうか?

    よろしくお願いします。

    2016年11月25日 9:00
  • StopTetheringAsyncでホットスポットがOFFになることを確認しました。
    実装コードに問題があるのではないでしょうか。

    コード提示できますか?

    2016年11月25日 10:31
    モデレータ
  • StopTetheringAsyncでホットスポットがOFFになることを確認しました。
    実装コードに問題があるのではないでしょうか。

    コード提示できますか?

      private NetworkOperatorTetheringManager tetheringManager= null; 

    private async void ToggleSwitch_Toggled_2(object sender, RoutedEventArgs e)
            {        
               ToggleSwitch toggleSwitch = sender as ToggleSwitch;
                if (toggleSwitch != null)
                {

                    if (toggleSwitch.IsOn == true)
                    {
                        NotifyUser("", NotifyType.StatusMessage);
                    }
                    else
                    {
                        //tetheringのoff
                        await tetheringManager.StopTetheringAsync();
                    } 
                }  

    Tak1wa様、ご返信ありがとうございます

    コードを添付いたします。

    トグルのoffによりテザリングをoffしますの想定です

    よろしくお願いします。

    2016年11月25日 10:39
  • ONのタイミングでインスタンスを保持してないのではないでしょうか。

        tetheringManager = NetworkOperatorTetheringManager.CreateFromConnectionProfile(
                                    NetworkInformation.GetInternetConnectionProfile()
                                    );
        
        string apSsid = txtSSID.Text;
        string apPass = txtPASS.Text;
        var accessPointConfig = new NetworkOperatorTetheringAccessPointConfiguration()
        {
            Ssid = apSsid, Passphrase = apPass
        };
        
        await tetheringManager.ConfigureAccessPointAsync(accessPointConfig);
        
        await tetheringManager.StartTetheringAsync();
    これでtertheringManageインスタンスを作成した後であれば動作するのではないでしょうか。
    そのあたりを踏まえてON・OFFできるように実装しては如何でしょう。

    2016年11月25日 10:42
    モデレータ
  • ONのタイミングでインスタンスを保持してないのではないでしょうか。

        tetheringManager = NetworkOperatorTetheringManager.CreateFromConnectionProfile(
                                    NetworkInformation.GetInternetConnectionProfile()
                                    );
        
        string apSsid = txtSSID.Text;
        string apPass = txtPASS.Text;
        var accessPointConfig = new NetworkOperatorTetheringAccessPointConfiguration()
        {
            Ssid = apSsid, Passphrase = apPass
        };
        
        await tetheringManager.ConfigureAccessPointAsync(accessPointConfig);
        
        await tetheringManager.StartTetheringAsync();
    これでtertheringManageインスタンスを作成した後であれば動作するのではないでしょうか。
    そのあたりを踏まえてON・OFFできるように実装しては如何でしょう。

    Tak1wa様

    大変ありがとうございます、

    ご教示の通りで、テザリングのoffできました、ありがとうございます。

    しかし、すでに、ホットスポットがOnになってる場合は、

    tetheringManagerの初期値はnullですので、

    切断のボタンが効かなくなります。

    どんな場合でも、テザリングをoffにする方法ございませんでしょうか?


    2016年11月25日 11:28
  • なるほどー、カレントの構成を取得すればいけるようです。

    private async void Button2_Click(object sender, RoutedEventArgs e)
    {
        tetheringManager = NetworkOperatorTetheringManager.CreateFromConnectionProfile(
                                    NetworkInformation.GetInternetConnectionProfile()
                                    );
        tetheringManager.GetCurrentAccessPointConfiguration();
        await tetheringManager.StopTetheringAsync();
    }

    2016年11月25日 11:42
    モデレータ
  • なるほどー、カレントの構成を取得すればいけるようです。

    private async void Button2_Click(object sender, RoutedEventArgs e)
    {
        tetheringManager = NetworkOperatorTetheringManager.CreateFromConnectionProfile(
                                    NetworkInformation.GetInternetConnectionProfile()
                                    );
        tetheringManager.GetCurrentAccessPointConfiguration();
        await tetheringManager.StopTetheringAsync();
    }

    Tak1wa様

    ご回答ありがとうございます、

    検証してみましたが、

    tetheringManager = NetworkOperatorTetheringManager.CreateFromConnectionProfile(
                                    NetworkInformation.GetInternetConnectionProfile()
                                    );

     tetheringManagerにたまりまして、またエラーになりました。

    2016年11月25日 12:19
  • こちらでは発生しませんね。

    「エラーになりました」のみは無しでお願いします。何も伝わりません。
    詳細なエラー内容および、再現コードを提示してください。

    2016年11月25日 14:16
    モデレータ
  • こちらでは発生しませんね。

    「エラーになりました」のみは無しでお願いします。何も伝わりません。
    詳細なエラー内容および、再現コードを提示してください。

    Tak1wa様

    ご返信ありがとうございます、

    エラーメッセージおよびコードを添付いたします。

    エラーメッセージ

    例外がスローされました: 'System.NullReferenceException' (tether.exe の中)

    追加情報:Object reference not set to an instance of an object.

    コード

     

     private NetworkOperatorTetheringManager tetheringManager= null;

    ...

    private async void Button_Click2(object sender, RoutedEventArgs e) { try { // 同一メソッド内でのネットワーク生成と切断 // ①テザリングのネットワーク生成する // ネットワークの生成   tetheringManager = NetworkOperatorTetheringManager.CreateFromConnectionProfile( NetworkInformation.GetInternetConnectionProfile() ); // ネットワークの設定用CONFIGの生成 var accessPointConfig = new NetworkOperatorTetheringAccessPointConfiguration() { // ネットワークのSIDを設定 Ssid = txtSSID.Text, // ネットワークのパスワードを設定 Passphrase = txtPASS.Text }; // CONFIGをネットワークに設定 await tetheringManager.ConfigureAccessPointAsync(accessPointConfig); // ネットワークの開始 await tetheringManager.StartTetheringAsync(); NotifyUser("ネットワークを起動しました", NotifyType.StatusMessage); } catch (Exception ex) { NotifyUser("テザリングはすでに起動しています、少々お待ちください" + ex.ToString(), NotifyType.StatusMessage); } } private async void bto2_Click(object sender, RoutedEventArgs e) { tetheringManager = NetworkOperatorTetheringManager.CreateFromConnectionProfile( NetworkInformation.GetInternetConnectionProfile() ); tetheringManager.GetCurrentAccessPointConfiguration(); await tetheringManager.StopTetheringAsync(); NotifyUser("ネットワークを停止しました", NotifyType.StatusMessage); }


    ご確認お願いいたします。


    2016年11月27日 7:25
  • Windows10とWindows10Mobileで確認しましたが問題は発生しませんでした。

    Windows10デスクトップPCから確認しても同じ問題が発生しますか。
    発生するのであればコードの問題かもしれませんが、発生しないのであればWindows10Mobileに起因した問題かもしれません。

    例えば、ネットワーク構成が原因でNetworkOperatorTetheringManagerインスタンスが取得できていない、など。

    いずれにせよ、どういう環境でどういうオペレーションを起こした時に、何がNullになっているのか
    もう少し掘り下げれますか。

    2016年11月27日 7:50
    モデレータ
  • Windows10とWindows10Mobileで確認しましたが問題は発生しませんでした。

    Windows10デスクトップPCから確認しても同じ問題が発生しますか。
    発生するのであればコードの問題かもしれませんが、発生しないのであればWindows10Mobileに起因した問題かもしれません。

    例えば、ネットワーク構成が原因でNetworkOperatorTetheringManagerインスタンスが取得できていない、など。

    いずれにせよ、どういう環境でどういうオペレーションを起こした時に、何がNullになっているのか
    もう少し掘り下げれますか。

    Tak1wa様

    いつもありがとうございます、

    やはりネットワーク構成かmobile端末自体か何か問題が起こしてます、

    よくわかりませんが、

    端末を一度resetしましたら、アプリをうまく実行できました。

    誠にありがとうございました。

    2016年11月27日 10:04