我正在尝试访问服务中的editText和Button。 我见过this answer和this answer,并试图合并并解决,但没有收获。我在这里错过了什么?我也看到了其他类似的答案,并试图从最近2天完成它,但都是徒劳的。任何其他方式来完成它也将受到欢迎。
以下是相关代码:
的 MainActivity.java
btn_start.setOnClickListener(new Button.OnClickListener(){
@Override
public void onClick(View view) {
startService(new Intent(getApplicationContext(), MyService.class));
}
});
MyService.java
Context context = MyService.this;
Activity activity = (Activity) context;
Button stopButton = activity.findViewById(R.id.btn_stop);
EditText editTextUsername = activity.findViewById(R.id.edit_name);
AndroidManifest.xml
<service
android:name=".MyService"
android:enabled="true"
android:exported="true">
</service>
但是我收到了这个错误: 的 logcat的
如果您需要更多参考,11-14 02:55:07.835 5906-5906 /? E / AndroidRuntime:致命异常:主要 处理:com.example.nwagh.myapplication,PID:5906 java.lang.RuntimeException:无法启动服务 com.example.nwagh.myapplication.MyService@32189af with Intent { cmp = com.example.nwagh.myapplication / .MyService}: java.lang.ClassCastException: com.example.nwagh.myapplication.MyService无法强制转换为 android.app.Activity 在android.app.ActivityThread.handleServiceArgs(ActivityThread.java:3060) 在android.app.ActivityThread.access $ 2300(ActivityThread.java:153) 在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1473) 在android.os.Handler.dispatchMessage(Handler.java:102) 在android.os.Looper.loop(Looper.java:154) 在android.app.ActivityThread.main(ActivityThread.java:5527) at java.lang.reflect.Method.invoke(Native Method) 在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:739) 在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:629) 引起:java.lang.ClassCastException: com.example.nwagh.myapplication.MyService无法强制转换为 android.app.Activity 在com.example.nwagh.myapplication.MyService.onStartCommand(MyService.java:68) 在android.app.ActivityThread.handleServiceArgs(ActivityThread.java:3043) 在android.app.ActivityThread.access $ 2300(ActivityThread.java:153) 在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1473) 在android.os.Handler.dispatchMessage(Handler.java:102) 在android.os.Looper.loop(Looper.java:154) 在android.app.ActivityThread.main(ActivityThread.java:5527) at java.lang.reflect.Method.invoke(Native Method) 在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:739) 在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:629)11-14 02:55:07.844 5906-5906 /? E / MQSEventManagerDelegate:无法获取 MQSService。
Here是完整的代码。
答案 0 :(得分:3)
你正在咆哮错误的树;-)你的Service
不应该知道你的用户界面,也不应该想知道它。如果您想从Service
更改用户界面,则需要将该任务委派给Activity
。 Activity
负责用户界面。您可以使用几种记录良好的方法:
Activity
绑定到Service
,Service
执行Activity
Service
向广播Intent
和Activity
发送一个监听器,该监听器在广播时对Intent
作出反应答案 1 :(得分:1)
服务不是活动。服务没有与之相关的UI。
所以:
1)您无法向某项活动投放服务。 2)您的服务中没有用户界面。
为什么服务需要按钮?服务在后台运行,没有用户交互。
我不知道你在做什么,但在Android中它的工作原理如下:
1)活动启动服务(如按下按钮) 2)服务在后台执行任务 3)服务报告返回活动或终止