Android - Bluetooth - Сбой в конце записи - PullRequest
0 голосов
/ 31 мая 2018

Я новичок в Android, и я в основном посылаю простой поток байтов между двумя устройствами.

Кажется, добавив дополнительное действие (кнопка подтверждения на втором макете), я ввел некоторые основныесложность, и я не могу точно определить, почему сбой ПОСЛЕ передачи.Сообщение передается во входном потоке и принимается в выходном потоке, но журналы, кажется, указывают на разорванный канал, несмотря на происходящую передачу.

Я пытался убедиться, что класс Java для «подтверждения»page 'наследует возможности BT от' main '.

Я подозреваю, что ошибка в MainActivity, и именно по возвращении с экрана подтверждения возникает эта ошибка.

* Что происходит, так эточто у меня есть новое действие с соответствующей кнопкой, чтобы подтвердить процесс запуска.После подтверждения BT должен отправить сигнал запуска и вернуться к основному макету

Здесь я подозреваю, что ошибка локализована.

Класс MainActivity

public void OnStartClick(View view) {


    Intent GetStartConfirmation = new Intent(this, StartConfirm.class);

    final int res = 99; // can use as a signal for another time

    startActivityForResult(GetStartConfirmation, res);

}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {

    super.onActivityResult(requestCode, resultCode, data);

    startPaintbot = resultCode;

    updateUi(resultCode);
}
private void updateUi(int res)
{
    if(res == 1) {
        //this should all be done on a result of '1'
        char data[] = {'s', 't', 'a', 'r', 't', 'u', 'p'};
        String str = new String(data);
        byte[] bytes = str.getBytes(Charset.defaultCharset());
        mBluetoothConnection.write(bytes);
    }
    else if (res == 0)
    {
        char data[] = {'s', 'u', 'p','p'};
        String str = new String(data);
        byte[] bytes = str.getBytes(Charset.defaultCharset());
        mBluetoothConnection.write(bytes);
    }
    else
    {
        char data[] = {'s', 'y', 'w','a'};
        String str = new String(data);
        byte[] bytes = str.getBytes(Charset.defaultCharset());
        mBluetoothConnection.write(bytes);
    }
}

Класс StartConfirm

public class StartConfirm extends MainActivity {

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

    setContentView(R.layout.start_confirm_layout);

    Intent activityStartHome = getIntent();

}



public void OnStartConfirmation(View view) {
    // Vid 5, Derek
    Intent toStart = new Intent();

    // this is where the difficulties lie, the intents.

    setResult(1, toStart);

    finish(); // eventually will need to add something to these two intents
}

public void OnNoStartConfirmation(View view) {

    Intent DoNotStart = new Intent();

    setResult(0, DoNotStart);
    //Do not want canceled, indicates there was a failure on the button

    finish();
}
}

Выходной журнал выглядит следующим образом:

04-12 02:59:33.379 15665-15665/com.example.piotr.userinterface D/BluetoothConnectionServ: write: Write Called.
write: Writing to outputstream: startup

04-12 02:59:33.379 15665-15665/com.example.piotr.userinterface D/BluetoothConnectionServ: write: Write Called.
write: Writing to outputstream: startup
04-12 02:59:33.379 15665-15665/com.example.piotr.userinterface E/BluetoothConnectionServ: write: Error writing to output stream. Broken pipe
04-12 02:59:33.449 15665-15680/com.example.piotr.userinterface D/OpenGLRenderer: endAllActiveAnimators on 0x9f355d80 (RippleDrawable) with handle 0x9f42c370
04-12 02:59:33.459 15665-15665/com.example.piotr.userinterface I/Timeline: Timeline: Activity_idle id: android.os.BinderProxy@8eaf228 time:88717553
04-12 02:59:33.699 15665-15665/com.example.piotr.userinterface D/MainActivity: onDestroy: called.
04-12 02:59:33.699 15665-15665/com.example.piotr.userinterface D/AndroidRuntime: Shutting down VM
04-12 02:59:33.699 15665-15665/com.example.piotr.userinterface E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.piotr.userinterface, PID: 15665
java.lang.RuntimeException: Unable to destroy activity {com.example.piotr.userinterface/com.example.piotr.userinterface.StartConfirm}: java.lang.IllegalArgumentException: Receiver not registered: com.example.piotr.userinterface.MainActivity$1@dadacf9
    at android.app.ActivityThread.performDestroyActivity(ActivityThread.java:5061)
    at android.app.ActivityThread.handleDestroyActivity(ActivityThread.java:5084)
    at android.app.ActivityThread.access$1700(ActivityThread.java:221)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1853)
    at android.os.Handler.dispatchMessage(Handler.java:102)
    at android.os.Looper.loop(Looper.java:158)
    at android.app.ActivityThread.main(ActivityThread.java:7224)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)
 Caused by: java.lang.IllegalArgumentException: Receiver not registered: com.example.piotr.userinterface.MainActivity$1@dadacf9
    at android.app.LoadedApk.forgetReceiverDispatcher(LoadedApk.java:878)
    at android.app.ContextImpl.unregisterReceiver(ContextImpl.java:1283)
    at android.content.ContextWrapper.unregisterReceiver(ContextWrapper.java:601)
    at com.example.piotr.userinterface.MainActivity.onDestroy(MainActivity.java:217)
    at android.app.Activity.performDestroy(Activity.java:7102)
    at android.app.Instrumentation.callActivityOnDestroy(Instrumentation.java:1170)
    at android.app.ActivityThread.performDestroyActivity(ActivityThread.java:5039)
    at android.app.ActivityThread.handleDestroyActivity(ActivityThread.java:5084) 
    at android.app.ActivityThread.access$1700(ActivityThread.java:221) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1853) 
    at android.os.Handler.dispatchMessage(Handler.java:102) 
    at android.os.Looper.loop(Looper.java:158) 
    at android.app.ActivityThread.main(ActivityThread.java:7224) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120) 
04-12 02:59:36.049 15665-15665/com.example.piotr.userinterface I/Process: Sending signal. PID: 15665 SIG: 9

Извинения, если это отвратительно

https://github.com/PK-GH/PB/tree/PeteInWonderland/app/src/main/java/com/example/piotr/userinterface

1 Ответ

0 голосов
/ 02 июня 2018

Ваше устройство, получающее данные, отключается при отправке устройства, поэтому появилась разорванная труба.Это появляется только тогда, когда 1 сторона соединения разорвана, не может знать, какой, но в этом случае я принимаю, потому что java.lang.RuntimeException: Unable to destroy activity {com.example.piotr.userinterface/com.example.piotr.userinterface.StartConfirm}: java.lang.IllegalArgumentException: Receiver not registered: com.example.piotr.userinterface.MainActivity$1@dadacf9

Мой совет проверьте соединение, оно подключено раньше, и если да, отладьте шаг за шагом инайти место где разъединяется

...