Android 投屏 发现

发布时间:2022-07-06 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了Android 投屏 发现脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

Qt:投屏的发现和发送_海天鹰-CSDN博客 做好一部分,就忍不住做安卓版,入门难,找对资料才是王道。@H_512_2@

SSDP协议的AndROId实现以及使用 - yxwkaifa - 博客园

SSDP他用了4个类,看得我头晕眼花,改一改,一个都不要!

重点:

MulticastSocket 的设置和发收。

Android 投屏 发现

package com.hty.dlna;

import android.annotation.SupPressLint;
import android.app.ActivITy;
import android.os.Bundle;
import android.os.Handler;
import android.os.LooPEr;
import android.os.Message;
import android.text.method.ScrollingMovementMethod;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

import java.net.DatagramPacket;
import java.net.inetAddress;
import java.net.MulticastSocket;

public class MainActivity extends Activity {

    TextView textView;
    Button button;

    @override
    PRotected void onCreate(Bundle savedInstancestate) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        textView = findViewById(R.id.textView);
        textView.setMovementMethod(ScrollingMovementMethod.getInstance());
        button = findViewById(R.id.button);
        button.setOnClickListener(new MyOnClickListener());
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        menu.add(0, 0, 0, "投屏");
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        int item_id = item.getItemId();
        switch (item_id) {
            case 0:
                textView.setText("");
                new Thread(new Runnable() {
                    @Override
                    public void run() {
                        discover();
                    }
                }).start();
                break;
        }
        return true;
    }

    class MyOnClickListener implements View.OnClickListener {
        @Override
        public void onClick(View v) {
            switch (v.getId()) {
                case R.id.button:
                    textView.setText("");
                    new Thread(new Runnable() {
                        @Override
                        public void run() {
                            discover();
                        }
                    }).start();
                    break;
            }
        }
    }

    void discover() {
        String s = ";m-sEArch * HTTP/1.1rn"
                + "HOST: 239.255.255.250:1900rn"
                + "MAN: "ssdp:discover"rn"
                + "ST: urn:schemas-upnp-org:service:AVTransport:1rn" //投屏
                + "MX: 3rn"
                + "rn";

        try  {
            MulticastSocket socket = new MulticastSocket(5800);
            InetAddress address = InetAddress.getByName("239.255.255.250");
            socket.joinGroup(address);
            DatagramPacket DP = new DatagramPacket(s.getBytes(), s.length(), address, 1900);
            socket.send(DP);
            Message message = new Message();
            message.what = 0;
            message.obj = "发送:n" + s;
            handler.sendMessage(message);

            while (true) {
                byte[] buf = new byte[1024];
                DP = new DatagramPacket(buf, buf.length);
                socket.receive(DP);
                String IP = DP.getAddress().toString();
                int port = DP.getPort();
                s = new String(DP.getData());
                message = new Message();
                message.what = 0;
                message.obj = "接收:" + IP + ":" + port + "n" + s;
                handler.sendMessage(message);
            }
        } catch (Exception e) {
            Message message = new Message();
            message.what = 0;
            message.obj = e.toString();
            handler.sendMessage(message);
        }
    }

    @SuppressLint("HandlerLeak")
    Handler handler = new Handler(Looper.getMainLooper()) {
        public void handleMessage(Message msg) {
            switch (msg.what) {
                case 0:
                    String s = (String) msg.obj;
                    textView.append(s);
                    break;
            }
        }
    };

}

接下来要解析XML,获取服务,推送网址。

脚本宝典总结

以上是脚本宝典为你收集整理的Android 投屏 发现全部内容,希望文章能够帮你解决Android 投屏 发现所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。