Recycle和蓝牙

客户端

package com.example.app_bluetoothclient;

import android.Manifest;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.bluetooth.BluetoothManager;
import android.bluetooth.BluetoothSocket;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Build;
import android.os.Bundle;
import android.os.Parcelable;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

import com.example.app_bluetoothclient.adapter.MyAdapter;
import com.example.app_bluetoothclient.listener.MyClickListener;

import java.io.IOException;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import java.util.UUID;

public class MainActivity extends AppCompatActivity {
    private UUID uuid = UUID.fromString("00001106-0000-1000-8000-00805F9B34FB");//蓝牙通讯规范

    private Button btDiscovery;
    private RecyclerView rvDoscovery;
    private Button btBond;
    private RecyclerView rvBond;
    //数据源
    private List<BluetoothDevice> devices_find=new ArrayList<>();
    private List<BluetoothDevice> devices_show=new ArrayList<>();
    //蓝牙管理者
    private BluetoothManager manager;
    private BluetoothAdapter bluetoothAdapter;
    //适配器
    private MyAdapter myAdapter_find;
    private MyAdapter myAdapter_show;
    //广播接收者
    private MyReciver myReciver;
    //静态
    public static   BluetoothSocket socket;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            requestPermissions(new String[]{Manifest.permission.ACCESS_FINE_LOCATION,
                    Manifest.permission.ACCESS_COARSE_LOCATION,
                    Manifest.permission.BLUETOOTH_ADMIN,
                    Manifest.permission.BLUETOOTH,
                    Manifest.permission.READ_EXTERNAL_STORAGE,
                    Manifest.permission.WRITE_EXTERNAL_STORAGE}, 100);
        }
        //打开蓝牙
        openBlueTooth();
        //注册
        initRegister();
        initView();
    }

    private void initRegister() {
        myReciver=new MyReciver();
        IntentFilter intentFilter=new IntentFilter();
        intentFilter.addAction(BluetoothDevice.ACTION_FOUND);
        registerReceiver(myReciver,intentFilter);
    }

    private void initData() {
        myAdapter_find=new MyAdapter(this,devices_find);
        myAdapter_show=new MyAdapter(this,devices_show);
        rvDoscovery.setAdapter(myAdapter_find);
        rvBond.setAdapter(myAdapter_show);
    }

    private void initBlueTooth() {
        manager= (BluetoothManager) getSystemService(BLUETOOTH_SERVICE);
        bluetoothAdapter=manager.getAdapter();
    }

    private void openBlueTooth() {
        //打开蓝牙
        Intent intent=new Intent();
        intent.setAction(BluetoothAdapter.ACTION_REQUEST_ENABLE);
        intent.setAction(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE);
        intent.putExtra(BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION,300);
        startActivity(intent);
    }

    private void initView() {
        btDiscovery = (Button) findViewById(R.id.bt_discovery);
        rvDoscovery = (RecyclerView) findViewById(R.id.rv_doscovery);
        btBond = (Button) findViewById(R.id.bt_bond);
        rvBond = (RecyclerView) findViewById(R.id.rv_bond);
        rvBond.setLayoutManager(new LinearLayoutManager(this));
        rvDoscovery.setLayoutManager(new LinearLayoutManager(MainActivity.this));
        initData();
        //初始化蓝牙管理者
        initBlueTooth();


        //搜索附近的
        btDiscovery.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                find();
            }
        });

        //已经配对的
        btBond.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                already();
            }
        });
        myAdapter_find.setMyClickListener(new MyClickListener() {
            @Override
            public void onItemClick(int position) {
                BluetoothDevice device = devices_find.get(position);
                device.createBond();
            }
        });

        myAdapter_show.setMyClickListener(new MyClickListener() {
            @Override
            public void onItemClick(final int position) {
                new Thread(new Runnable() {
                    @Override
                    public void run() {
                        BluetoothDevice device = devices_show.get(position);
                        try {
                            socket = device.createInsecureRfcommSocketToServiceRecord(uuid);
                            socket.connect();
                            if (socket.isConnected()){
                                Log.i("TAG", "run: 连接成功");
                                Intent intent=new Intent(MainActivity.this,Main2Activity.class);
                                startActivity(intent);
                            }else {
                                Log.i("TAG", "run: 连接失败");
                            }
                        } catch (IOException e) {
                            Log.i("TAG", "run: 连接失败");
                        }

                    }
                }).start();

            }
        });
    }

    private void find() {

        //清空数据源
        devices_find.clear();
        //保持连接
        bluetoothAdapter.startDiscovery();
    }

    private void already() {
        //清空数据源
        devices_show.clear();
        Set<BluetoothDevice> devices = bluetoothAdapter.getBondedDevices();
        devices_show.addAll(devices);
        Toast.makeText(this, ""+devices.size(), Toast.LENGTH_SHORT).show();
        myAdapter_show.notifyDataSetChanged();
//        myAdapter_show=new MyAdapter(MainActivity.this,devices_show);
//        rvBond.setAdapter(myAdapter_show);

    }
    //广播接收者来搜索附近的蓝牙用户
    public class MyReciver extends BroadcastReceiver{

        @Override
        public void onReceive(Context context, Intent intent) {
            if(intent.getAction().equals(BluetoothDevice.ACTION_FOUND)){
                BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
                //数据源存入数据
                devices_find.add(device);
                myAdapter_find.notifyDataSetChanged();
                Toast.makeText(MainActivity.this, ""+device.toString(), Toast.LENGTH_SHORT).show();
//                myAdapter_find=new MyAdapter(context,devices_find);
//                rvDoscovery.setAdapter(myAdapter_find);



            }
        }
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        unregisterReceiver(myReciver);
    }
}

线程

package com.example.app_bluetoothclient;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.text.TextUtils;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.OutputStream;

public class Main2Activity extends AppCompatActivity {

    private EditText et;
    private Button btSend;
    private Button btFile;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);
        initView();
    }

    private void initView() {
        et = (EditText) findViewById(R.id.et);
        btSend = (Button) findViewById(R.id.bt_send);
        btFile = (Button) findViewById(R.id.bt_file);

        btSend.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //发送文字
                String message = et.getText().toString();
                if (TextUtils.isEmpty(message)){
                    Toast.makeText(Main2Activity.this, "消息框不能为空", Toast.LENGTH_SHORT).show();
                    return;
                }
                //发送文字
                try {
                    MainActivity.socket.getOutputStream().write(message.getBytes());
                    Toast.makeText(Main2Activity.this, "发送成功", Toast.LENGTH_SHORT).show();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        });
        //发送图片
        btFile.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                new Thread(new Runnable() {
                    @Override
                    public void run() {
                        try {
                            FileInputStream fileInputStream = new FileInputStream("/storage/sdcard0/DCIM/like20.png");
                            OutputStream outputStream = MainActivity.socket.getOutputStream();
                            byte[]bytes=new byte[1024];
                            int len=0;
                            while ((len=fileInputStream.read(bytes))!=-1){
                                outputStream.write(bytes,0,len);
                            }
                        } catch (Exception e) {
                            e.printStackTrace();
                        }
                    }
                }).start();
            }
        });

    }
}

listener
public interface MyClickListener {
    void onItemClick(int position);
}
public interface MyLongClickListener {
    void itemLongClick(int position);
}

适配器
package com.example.app_bluetoothclient.adapter;

import android.bluetooth.BluetoothDevice;
import android.content.Context;
import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

import com.example.app_bluetoothclient.R;
import com.example.app_bluetoothclient.listener.MyClickListener;
import com.example.app_bluetoothclient.listener.MyLongClickListener;

import java.util.ArrayList;
import java.util.List;

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> {

    private Context context;
    private List<BluetoothDevice> list;
    private LayoutInflater layoutInflater;
    private MyClickListener myClickListener;
    private MyLongClickListener myLongClickListener;
    public MyAdapter(Context context, List<BluetoothDevice> list) {
        this.context = context;
        this.list = list;
        layoutInflater=LayoutInflater.from(context);
    }

    public void setMyClickListener(MyClickListener myClickListener) {
        this.myClickListener = myClickListener;
    }

    public void setMyLongClickListener(MyLongClickListener myLongClickListener) {
        this.myLongClickListener = myLongClickListener;
    }

    @NonNull
    @Override
    public MyViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
        View inflate = layoutInflater.inflate(R.layout.item, viewGroup, false);
        return new MyViewHolder(inflate);
    }

    @Override
    public void onBindViewHolder(@NonNull MyViewHolder myViewHolder, final int i) {
        myViewHolder.textView.setText(list.get(i).getName());
        //短点击
        myViewHolder.itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                myClickListener.onItemClick(i);
            }
        });
        //长点击
        myViewHolder.itemView.setOnLongClickListener(new View.OnLongClickListener() {
            @Override
            public boolean onLongClick(View v) {
                myLongClickListener.itemLongClick(i);
                return true;
            }
        });
    }

    @Override
    public int getItemCount() {
        return list.size();
    }

    public class MyViewHolder extends RecyclerView.ViewHolder{

        private TextView textView;
        public MyViewHolder(@NonNull View itemView) {
            super(itemView);
            textView=itemView.findViewById(R.id.tv);
        }
    }
}

服务端

package com.example.app_bluetoothservice;

import android.Manifest;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.bluetooth.BluetoothManager;
import android.bluetooth.BluetoothServerSocket;
import android.bluetooth.BluetoothSocket;
import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

import java.io.IOException;
import java.util.UUID;

public class MainActivity extends AppCompatActivity {
    private UUID uuid = UUID.fromString("00001106-0000-1000-8000-00805F9B34FB");//蓝牙通讯规范
    private Button btServer;
    //蓝牙管理者
    private BluetoothManager manager;
    private BluetoothAdapter bluetoothAdapter;

    private Handler handler=new Handler(){
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            if (msg.what==1){
                Toast.makeText(MainActivity.this, ""+msg.obj, Toast.LENGTH_SHORT).show();

            }
            if (msg.what==2){
                Toast.makeText(MainActivity.this, ""+msg.obj, Toast.LENGTH_SHORT).show();

            }
        }
    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        if (Build.VERSION.SDK_INT>=Build.VERSION_CODES.M){
            requestPermissions(new String[]{Manifest.permission.READ_EXTERNAL_STORAGE,
                    Manifest.permission.BLUETOOTH,
                    Manifest.permission.BLUETOOTH_ADMIN,
                    Manifest.permission.ACCESS_COARSE_LOCATION,
                    Manifest.permission.ACCESS_FINE_LOCATION,
                    Manifest.permission.WRITE_EXTERNAL_STORAGE},100);
        }
        //初始化蓝牙管理者
        manager= (BluetoothManager) getSystemService(BLUETOOTH_SERVICE);
        bluetoothAdapter=manager.getAdapter();
        initView();
    }

    private void initView() {
        btServer = (Button) findViewById(R.id.bt_server);


        new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    BluetoothServerSocket socket = bluetoothAdapter.listenUsingInsecureRfcommWithServiceRecord(bluetoothAdapter.getName(), uuid);
                    while (true) {
                        BluetoothSocket accept = socket.accept();

                        //开启线程服务
                        new ServerThread(accept, handler).start();
                    }

                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }).start();

    }
}

线程


package com.example.app_bluetoothservice;

import android.bluetooth.BluetoothSocket;
import android.os.Handler;
import android.os.Message;
import android.util.Log;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;

public  class ServerThread extends Thread {
    private static final String TAG = "ServerThread";
    private BluetoothSocket socket;
    private Handler handler;

    public ServerThread(BluetoothSocket socket, Handler handler) {
        this.socket = socket;
        this.handler = handler;
    }

    @Override
    public void run() {
        super.run();
        Log.i(TAG, "run:我进门来了 ");
//        try {
//            InputStream inputStream = socket.getInputStream();
//            byte[]bytes=new byte[1024];
//            int read = inputStream.read(bytes);
//            String s = new String(bytes, 0, read);
//            Message obtain = Message.obtain();
//            obtain.what=1;
//            obtain.obj=s;
//            handler.sendMessage(obtain);
//        } catch (IOException e) {
//            e.printStackTrace();
//        }
        try {
            InputStream inputStream = socket.getInputStream();
            FileOutputStream fileOutputStream = new FileOutputStream("/storage/mogu.jpg");
            byte[]bytes=new byte[1024];
            int len=0;
            while ((len=inputStream.read(bytes))!=-1){
                fileOutputStream.write(bytes,0,len);
                Log.i("TAG", "run: "+len);
            }
;
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: skb recycle是指射频技术中的信道回收技术,主要用于无线通信系统中的信号处理和网络优化。在无线通信系统中,信道回收技术能够提高系统的频谱效率和用户的数据传输速率。 skb recycle的原理是通过对已经传输的信号进行回收和重新利用,以提高频谱利用率。具体而言,它能够捕获已经传输过的信号,对这些信号进行补偿和修正,然后再次发送给其他需要使用该信号的用户。因此,信道回收技术能够显著减少频谱资源的浪费,并且在减少信号干扰的同时提高了系统的容量。 skb recycle技术在无线通信系统中的应用广泛。例如,在蜂窝网络中,当用户在移动中切换到新的基站时,之前所使用的频率资源可以被回收利用。此外,信道回收技术还可以被应用于多天线系统中,通过捕获和再利用多径信号,提高系统的容量和覆盖范围。 总之,skb recycle是一种利用信道回收技术提高无线通信系统频谱效率和用户数据传输速率的方法。它可以帮助无线通信系统更高效地利用频谱资源,提升用户体验和网络性能。 ### 回答2: skb recycle是指对skb(Socket Buffer)进行回收利用的过程。 在操作系统中,skb是一种用于在内核与网络协议栈之间传输数据的数据结构。它包含有关数据包的各种信息,例如发送方和接收方的IP地址、协议类型、数据长度等。 skb recycle是一种优化技术,旨在提高网络数据传输的效率和性能。在传输数据时,操作系统会创建多个skb对象,用于存储不同的数据包。一旦数据包传输完成后,这些被使用过的skb对象就可以进行回收利用,以避免频繁地创建和销毁对象,从而减少系统开销。 skb recycle的核心思想是在创建skb对象时,使用一个空闲列表来记录可用的回收对象。当需要新的skb对象时,首先从空闲列表中获取,如果列表为空,则会创建新的对象。而当数据包完成传输后,就将该skb对象重新加入到空闲列表中,以供下一次使用。 通过使用skb recycle技术,可以显著提高网络性能和吞吐量。因为减少了频繁地创建和销毁对象,系统的开销大大降低。同时,有效地回收利用已用过的skb对象,也减少了内存资源的浪费。 总之,skb recycle是一种对skb对象进行回收利用的技术,可以提高网络数据传输的效率和性能,减少系统开销和内存浪费。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值