【问题标题】:How to accept bluetooth received file in Android application?如何在 Android 应用程序中接受蓝牙接收的文件?
【发布时间】:2012-04-23 14:41:55
【问题描述】:

我想实现一个应用程序来从蓝牙设备接收文件

在接收之前,将发出通知以接受传入的文件请求。

从那里,我想激活“接受”并在用户从另一个蓝牙配对设备接收到第二个文件时自动下载文件,而不会出现接受对话框,而在用户启动应用程序时不会出现通知干扰。

【问题讨论】:

标签: android file bluetooth


【解决方案1】:

在根设备上,您只需在手机上安装两个应用即可实现目标。

  1. XPosed 安装程序
  2. 自动接受

这样你就可以挂接系统服务了。

import android.util.*;
import de.robv.android.xposed.*;
import de.robv.android.xposed.callbacks.XC_LoadPackage.*;

import static de.robv.android.xposed.XposedHelpers.findAndHookMethod;

public class Tutorial implements IXposedHookLoadPackage
{

    private String TAG="TUTORIAL";
    public void handleLoadPackage(final LoadPackageParam lpparam) throws Throwable {
        if (!lpparam.packageName.equals("com.android.bluetooth"))
        {
            Log.i(TAG,"Not: "+lpparam.packageName);
            return;
        }
        Log.i(TAG,"Yes "+lpparam.packageName);  

        findAndHookMethod("com.android.bluetooth.opp.BluetoothOppManager", lpparam.classLoader, "isWhitelisted", String.class,new XC_MethodHook() {
                @Override
                protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
                    Log.v(TAG,"HOOK DONE");
                    param.setResult(true); /* you can compare the sender address(String) with your computer and determine if you return true or just allow the original method to be called after this returns.*/

                }
            });

    }
}

更多信息,请访问my answer in SO。

我会在这里发布一些直接链接。

链接

Dropbox link of the auto accepting app

Dropbox link of the project files (zip)

Xposed apk site

Towelroot site to root your phone

Auto-Accept github repository

【讨论】:

    【解决方案2】:

    我开发了一个包含此类任务的应用程序,您可以使用BluetoothChat 示例。 您必须将安全标志设置为 false: ` 布尔安全 = 假;

            try {
                if (secure) {
                    tmp = mAdapter.listenUsingRfcommWithServiceRecord(NAME_SECURE,
                        MY_UUID_SECURE);
                } else {
                    tmp = mAdapter.listenUsingInsecureRfcommWithServiceRecord(
                            NAME_INSECURE, MY_UUID_INSECURE);
                }
            } catch (IOException e) {
                Log.e(TAG, "Socket Type: " + mSocketType + "listen() failed", e);
    
            mmServerSocket = tmp;
        }`
    

    然后从你可以在 ConnectedThread 中找到的 InputStream 中读取缓冲区:

    while (true) {
                try {
    
                    bytes = mmInStream.read(buffer);
                     /*write bytes in a file*/
    
    
                } catch (IOException e) {
                    Log.e(TAG, "disconnected", e);
                    connectionLost();
    
                    BluetoothChatService.this.start();
                    break;
                }
            }
    

    【讨论】:

    • @Gelvis 你需要先杀死接受连接的系统服务。
    【解决方案3】:

    您可以尝试使用Bluetooth socket 连接来设置客户端服务器 TCP 类似的连接。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-04-27
      • 2023-04-10
      • 2023-02-23
      • 2016-06-21
      • 1970-01-01
      • 2011-04-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多