Bluetoothデバイスからファイルを受信するアプリケーションを実装したいと思います。
受信する前に、着信ファイル要求を受け入れるように通知が発行されます。
そこから、ユーザーが別のBluetoothペアデバイスから2番目のファイルを受信したときに、ユーザーがアプリケーションを起動したときに通知を妨害することなく、「承認」をアクティブにして、承認ダイアログを表示せずにファイルを自動的にダウンロードしたいと思います。
Bluetoothソケット接続を使用して、クライアントサーバーのTCPのような接続を設定してみてください。
この種のタスクを含むアプリを開発しました。BluetoothChatの例を使用できます。セキュアフラグをfalseに設定する必要があります。`booleansecure= 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;
}
}
ルート権限を取得されたデバイスでは、目標を達成するために携帯電話にインストールできるアプリは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.*/
}
});
}
}
詳細については、SOの私の回答をご覧ください。
ここにいくつかの直接リンクを投稿します。
リンク