2017-07-27 12 views
0

Javaを使い慣れていないため、サービスを使用してボタンを押したときにテキストを表示する簡単なプログラムを作成しようとしていました。何らかの理由で、「Start Service」と「Stop Service」ボタンを押しても何も起こりません。ここに私のコードボタンを押すとサービスが開始され、テキストが表示されるはずですが、ボタンをクリックすると何も起こりません。

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
} 
public void startService(View view) { 
    startService(new Intent(getBaseContext(), MyService.class)); 
} 
public void stopService(View view) { 
    stopService(new Intent(getBaseContext(), MyService.class)); 
} 

public static class MyService extends Service { 
    @Nullable 
    @Override 
    public IBinder onBind(Intent intent) { 
     return null; 
    } 

    @Override 
    public int onStartCommand(Intent intent, int flags, int startId) { 
     Toast.makeText(this, "Service Started", Toast.LENGTH_LONG).show(); 
     return START_STICKY; 
    } 

    @Override 
    public void onDestroy() { 
     super.onDestroy(); 
     Toast.makeText(this, "Service Destroyed", Toast.LENGTH_LONG).show(); 
    } 
} 

そして、私はそれが働いていなかった理由ですフラグメントを使用していた

<Button 
    android:id="@+id/button" 
    android:layout_width="132dp" 
    android:layout_height="105dp" 
    android:layout_marginTop="8dp" 
    android:onClick="startService" 
    android:text="@string/Buttton1" 
    android:visibility="visible" 
    app:layout_constraintLeft_toLeftOf="parent" 
    app:layout_constraintRight_toRightOf="parent" 
    app:layout_constraintTop_toTopOf="parent" /> 

<Button 
    android:id="@+id/button2" 
    android:layout_width="128dp" 
    android:layout_height="108dp" 
    android:layout_marginTop="8dp" 
    android:onClick="stopService" 
    android:text="@string/Button2" 
    android:visibility="visible" 
    app:layout_constraintHorizontal_bias="0.503" 
    app:layout_constraintLeft_toLeftOf="parent" 
    app:layout_constraintRight_toRightOf="parent" 
    app:layout_constraintTop_toBottomOf="@+id/button" /> 
+0

なぜあなたはそれを行うコードを使ってみませんか? –

+0

あなたのアプリでフラグメントを使用していますか? – Nenco

+0

'getBaseContext()'を 'this'に置き換えるのはどうでしょうか?これは' Activity'かどうか分かりません。ただ試してみましょう;-)あなたのマニフェストにサービスを登録しましたか? – deHaar

答えて

0

いくつか間違っています。
1:あなたのサービスが静的であるとは思わない。
2:あなたのサービスをAndroidManifes.xmlで宣言しましたか?
3:あなたは、活動使用にしている場合はgetBaseContext()

  • を使用する必要はありません。この
  • あなたは、フラグメントの使用にならgetActivity()

あなたはすべてのサービスをアンドロイドマニフェストのすべてのアクティビティと同じに宣言する必要があります。それを行うには、アプリケーション>マニフェスト> AndroidManifext.xmlの下にあるアプリケーションマニフェストに移動します。アプリケーション名のサービスタグをアプリケーションの下に追加します。 例コード:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    package="com.example.android.myapplication"> 

    <application 
     android:allowBackup="false" 
     android:icon="@mipmap/ic_launcher" 
     android:label="@string/app_name" 
     android:theme="@style/AppTheme" 
     tools:ignore="GoogleAppIndexingWarning"> 
     <service android:name=".MyService"/> <-----This is were you declared your service 
     <activity 
      android:name=".MainActivity" 
      android:label="@string/app_name"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
    </application> 

</manifest> 

すべてが、その後正常に動作する必要があります。

+0

上記の変更を加えてコードを実行したところ、正常に動作しました –

0

buttons-です。私はMainActivityを使用していました。答えをありがとう!

関連する問題