我有两个按钮(开始/停止),点击时需要弹出一个Toast,说明服务发生了什么。 Start =“服务已启动”的弹出窗口,服务实际启动。该服务尚未完成,稍后将获取一些GPS信息。
无论如何,我的Toasts都没出现,我希望我不会错过一些明显的东西。
主要(活动)
public class Main extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button startBtn = (Button) findViewById(R.id.startButton);
startBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startService(new Intent(getBaseContext(), ParseService.class));
}
});
Button stopBtn = (Button) findViewById(R.id.startButton);
stopBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
stopService(new Intent(getBaseContext(), ParseService.class));
}
});
}
}
ParseService
public class ParseService extends Service {
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public int onStartCommand(Intent e, int flags, int startId){
Toast.makeText(this, "Service has Started", Toast.LENGTH_LONG).show();
return START_STICKY;
}
@Override
public void onDestroy(){
super.onDestroy();
Toast.makeText(this, "Service has Stopped", Toast.LENGTH_LONG).show();
}
}
activity_main.xml中
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:textAlignment="center"
tools:context="${packageName}.${activityClass}" >
<Button
android:id="@+id/startButton"
android:layout_width="150dp"
android:layout_height="60dp"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_marginTop="92dp"
android:text="Start" />
<Button
android:id="@+id/stopButton"
android:layout_width="150dp"
android:layout_height="60dp"
android:layout_alignLeft="@+id/startButton"
android:layout_below="@+id/startButton"
android:layout_marginTop="74dp"
android:text="Stop" />
</RelativeLayout>
答案 0 :(得分:0)
您应该使用服务中的应用程序上下文而不是服务的上下文。
来自您的服务:
Toast.makeText(getApplicationContext(), // application Context not 'this'
"Service has Started",
Toast.LENGTH_LONG).show();
或者,如果您愿意,可以在调用服务之前从您的Activity中显示它们,但我认为您当前定位的调用位置更有意义,并且只要您始终希望显示Toast,就会减少重复次数。< / p>
好的,在制作了一个快速测试应用程序后,我想我发现了可能出现的问题。
您是否在AndroidManifest.xml
??
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.indivisible.testapp">
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme">
<activity
android:name=".toasts.ToastActivity"
android:label="@string/title_activity_toast">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
<!-- Define your Service as below.
In my case the path is:
.../TestApp/app/src/main/java/com/indivisible/testapp/toasts/ToastService.java
Android Studio has a nice auto-complete when you press '.'
-->
<service
android:name=".toasts.ToastService"
android:label="ToastService">
</service>
</application>
</manifest>
答案 1 :(得分:0)
您的服务似乎没有开始,请确保服务在清单中声明并启用,如下所示:
<service
android:name=".ParseService"
android:enabled="true" />
希望这有帮助