2016-03-21 10 views
-1

私はサービス内に受信機を持っています。どのように私はマニフェストの受信機を宣言しますか?私はスケジュールされたアラームがあるので、私は受信機が必要です。どのように私はサービスの受信機を宣言している?コードは以下の通りです。ロジック/構文は正しいですか?受信機のコードは一度だけ実行されます。どうして?問題マニフェスト内のサービス内で受信者を宣言するにはどうすればよいですか?

package com.todaysfuture.dynpin; 


/** 
* Created by rishabh on 14/2/16. 
*/ 
public class MyService extends Service { 

@Override 
public void onCreate() { 
    // TODO Auto-generated method stub 
    super.onCreate(); 
    //does some stuff 


    final BroadcastReceiver receiver = new BroadcastReceiver() { 
     @Override 
     public void onReceive(Context context, Intent intent) { 
      { 
       //does some stuff 
      } 
     } 
    }; 
    registerReceiver(receiver, filter); 

} 
@Nullable 
public IBinder onBind(Intent intent) { 
    return null; 
} 

}

+1

は、このような紛らわしい名前を保持しません。なぜサービスクラスにレシーバーとして名前を付けたのですか? –

+0

盲目的にコード化しないでください。命名規則、calss/method/variable scopeなどを理解しておいてください。ここでBroadcastReceiverのスコープはメソッド内にあります。タスクが完了したら、登録を解除するにはレシーバーの参照が必要です。 – Isham

+0

ねえ。ここでそれを変更しました – AxeManTOBO

答えて

0

何ができるか、私はここにあなたが尋ねたものの一例を配置します。
この例では、画面のオン/オフをリッスンしています。
あなたのお役に立てば幸いです。

サービス:サービスを開始

public class MyService extends Service { 
    private final BroadcastReceiver receiver = new BroadcastReceiver() { 
     @Override 
     public void onReceive(Context context, Intent intent) { 
      String action = intent.getAction(); 
      boolean res; 
      if (action.equals("android.intent.action.SCREEN_ON")) { 
       res = true; 
      } else if (action.equals("android.intent.action.SCREEN_OFF")) { 
       res = true; 
      } 
     } 
    }; 

    @Override 
    public void onCreate() { 
     Toast.makeText(this, "The new Service was Created", Toast.LENGTH_LONG).show(); 
     IntentFilter filter = new IntentFilter(); 
     filter.addAction("android.intent.action.SCREEN_ON"); 
     filter.addAction("android.intent.action.SCREEN_OFF"); 

     registerReceiver(receiver, filter); 
    } 

    @Override 
    public void onStart(Intent intent, int startId) { 
     // For time consuming an long tasks you can launch a new thread here... 
     Toast.makeText(this, " Service Started", Toast.LENGTH_LONG).show(); 

    } 

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

    @Nullable 
    @Override 
    public IBinder onBind(Intent intent) { 
     return null; 
    } 
} 

アクティビティ:

public class MainActivity extends AppCompatActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     startService(new Intent(this, MyService.class)); 
    } 
} 

マニフェスト:

<manifest package="com.test.myapplication" 
      xmlns:android="http://schemas.android.com/apk/res/android"> 

    <action android:name="android.intent.action.SCREEN_OFF"></action> 
    <action android:name="android.intent.action.SCREEN_ON"></action> 

    <application 
     android:allowBackup="true" 
     android:icon="@mipmap/ic_launcher" 
     android:label="@string/app_name" 
     android:supportsRtl="true" 
     android:theme="@style/AppTheme"> 
     <activity android:name=".MainActivity"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN"/> 

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

     <service 
      android:name=".MyService" 
      android:enabled="true" 
      android:exported="true" > 
     </service> 
    </application> 

</manifest> 
+0

umm。これは私がやったことです。この回答は、どのように行われたのと違うのですか? – AxeManTOBO

+0

あなたはサービスのonCreateで 'filter'に宣言していません。 – motis10

+0

しかし、私はどんなフィルターも必要ありません。 – AxeManTOBO

関連する問題