0

問題: 簡単な説明: 後で PC アプリケーションに接続するために、PC に表示されるサービスとポートを登録しようとしています。このコードはサービスを登録しません。その理由はわかりません。Android モニターを介して携帯電話で実行すると、ロガーを使用して登録が失敗したことがわかります。

詳細な説明: PC に Android Phone からの情報を提供する単純なアプリを作成しようとしています。私はネットワークプログラミングに慣れていませんが、私の研究から、AndroidのNsdManagerを使用すると、「ソケットプログラミング」を使用して接続するために開発中のPCアプリケーション用にネットワーク上で実行されるサービスを作成できることがわかりました。私は NsdManager を使用してこのサービスを登録しようとしました (PC で接続するために、私のネットワークで実行されているサービスを電話で開始するためのより良い方法である場合、情報は大歓迎です.

リクエストされたヘルプ: 知っておくと便利です: 1. 後で開発する PC アプリと "ペアリング" する Android アプリの開発を開始する最良の方法は何ですか? 2. サービスを登録する NsdManager メソッドはこれで機能しますか? 3. このサービスが登録できない理由のエラー コードをキャッチする方法はありますか? 4. Android ネットワークの開発を始めるのに役立つリソース、ライブラリ、ヒント、またはコツはありますか? 私はこのサブセクションの開発に不慣れで、これらの種類のものを探しています。

コード:

import android.app.Activity;
    import android.content.Context;
    import android.net.nsd.NsdManager;
    import android.net.nsd.NsdServiceInfo;
    //import android.support.v7.appcompat.R;
    import android.os.Bundle;
    import android.util.Log;

public class ServerActivity extends Activity {     //Possibly should be extends "AppCompatActivity"
private String SERVICE_NAME = "meService";
private String SERVICE_TYPE = "_http._tcp.";
private String TAG = "ServerActivity";
private NsdManager mNsdManager;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_server);

    mMethod();

}

private void mMethod() {
    mNsdManager = (NsdManager) getSystemService(Context.NSD_SERVICE);
    registerService(9000);
}

@Override
protected void onPause() {
    if (mNsdManager != null) {
        mNsdManager.unregisterService(mRegistrationListener);
    }
    super.onPause();
}

@Override
protected void onResume() {
    super.onResume();
    if (mNsdManager != null) {
        registerService(9000);
    }

}

@Override
protected void onDestroy() {
    if (mNsdManager != null) {
        mNsdManager.unregisterService(mRegistrationListener);
    }
    super.onDestroy();
}

public void registerService(int port) {
    NsdServiceInfo serviceInfo = new NsdServiceInfo();
    serviceInfo.setServiceName(SERVICE_NAME);
    serviceInfo.setServiceType(SERVICE_TYPE);
    serviceInfo.setPort(port);

    mNsdManager.registerService(serviceInfo,
            NsdManager.PROTOCOL_DNS_SD,
            mRegistrationListener);
}

NsdManager.RegistrationListener mRegistrationListener = new NsdManager.RegistrationListener() {

    @Override
    public void onServiceRegistered(NsdServiceInfo NsdServiceInfo) {
        String mServiceName = NsdServiceInfo.getServiceName();
        SERVICE_NAME = mServiceName;
        Log.d(TAG, "Registered name : " + mServiceName);
    }

    @Override
    public void onRegistrationFailed(NsdServiceInfo serviceInfo,
                                     int errorCode) {
        Log.d(TAG, "Registration failed: " + errorCode);
        // Registration failed! Put debugging code here to determine
        // why.
    }

    @Override
    public void onServiceUnregistered(NsdServiceInfo serviceInfo) {
        // Service has been unregistered. This only happens when you
        // call
        // NsdManager.unregisterService() and pass in this listener.
        Log.d(TAG,
                "Service Unregistered : " + serviceInfo.getServiceName());
    }

    @Override
    public void onUnregistrationFailed(NsdServiceInfo serviceInfo,
                                       int errorCode) {
        // Unregistration failed. Put debugging code here to determine
        // why.
    }


   };

}

お時間を割いていただき、ありがとうございました。

4

0 に答える 0