按钮显示Toast并开始服务

时间:2014-06-21 17:53:00

标签: java android xml

我有两个按钮(开始/停止),点击时需要弹出一个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>

2 个答案:

答案 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" />

希望这有帮助