Как использовать resultreceiver с запущенным сервисом в android .
Я создал класс resultreceiver,передал его с помощью intent в службу и реализовал функцию send() в службе, чтобы передать пакет в действие.
Я думаю, что я следовал правильным шагам, я также реализовал метод runonUithread() в методе onresultReceive ().
Цель проста: когда пользователь нажимает на кнопку , служба запускается, а затем жестко закодированные строковые данные передаются в действие для обновления текстового представления.
Проблема : когда я нажимаю на кнопку, ничего не происходит. В logcat нет выходных данных, а также нет изменений в textview. Наверное, я что-то пропустил в коде, но понятия не имею, что именно.
передавая весь мой код здесь :
-----------------------------------------------------------
activity_main.xml :
<?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> <TextView android:id="@+id/textview1" android:layout_width="0dp" android:layout_height="1dp" app:layout_constraintBottom_toTopOf="@+id/button" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" /> <Button android:id="@+id/button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginBottom="216dp" android:onClick="StartService" android:text="Click" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintHorizontal_bias="0.498" app:layout_constraintStart_toStartOf="parent" /> </androidx.constraintlayout.widget.ConstraintLayout>----------------------------------------------
MainActivity.java :
package com.deepesh.startedserviceapp; import androidx.appcompat.app.AppCompatActivity; import android.content.Intent; import android.os.Bundle; import android.os.Handler; import android.os.ResultReceiver; import android.view.View; import android.widget.TextView; import android.widget.Toast; public class MainActivity extends AppCompatActivity { public static final String MESSAGE_KEY="message_key"; public static final String RECEIVER_TAG = "RECEIVER_TAG"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } public void setTextviewtext(String s ){ TextView textView = findViewById(R.id.textview1); textView.setText(s); } public void StartService(View view) { ResultReceiver receiver = new MyResultReceiver(null); Intent intent = new Intent(MainActivity.this,started_service.class); intent.putExtra(MainActivity.RECEIVER_TAG,receiver); startService(intent); } class MyResultReceiver extends ResultReceiver{ public MyResultReceiver(Handler handler) { super(handler); } @Override protected void onReceiveResult(int resultCode, Bundle resultData) { super.onReceiveResult(resultCode,resultData); if (resultData !=null){ final String data = resultData.getString(MainActivity.MESSAGE_KEY); MainActivity.this.runOnUiThread(new Runnable() { @Override public void run() { setTextviewtext(data); } }); } } } }---------------------------------------------------------
started_service.java :
package com.deepesh.startedserviceapp; import android.app.Service; import android.content.Intent; import android.os.Bundle; import android.os.IBinder; import android.os.ResultReceiver; public class started_service extends Service { public started_service() { } @Override public int onStartCommand(Intent intent, int flags, int startId) { ResultReceiver receiver = intent.getParcelableExtra(MainActivity.RECEIVER_TAG); Bundle bundle = new Bundle(); bundle.putString(MainActivity.MESSAGE_KEY,"Hello World !"); receiver.send(MainActivity.RESULT_OK,bundle); return Service.START_REDELIVER_INTENT; } @Override public IBinder onBind(Intent intent) { return null; } }
Что я уже пробовал:
Я попытался поискать в google, но там нет никакого недавнего обновленного ответа на эту проблему.
Garth J Lancaster
Ну, вы изложили намерение, показали некоторый код, но вы на самом деле не описали "что происходит" - вы получаете ошибку, исключение или код даже не компилируется ? . это может быть хорошей идеей для использования Улучшить вопрос и скажите, в чем собственно заключается проблема.
[no name]
Готово, добавил он
David Crow
- В логкэте нет выходных данных..."
Может быть, потому, что нет никаких звонков ни в один из Log
методы.
Ты пропал без вести try/catch
блоки нарочно?