NotificationListenerServiceというAPIで、端末に発生した通知を取得しようとしているのですが、bindServiceをコールしてonBindが呼ばれると、それ以降は通知を取得することができません。
bindServiceを使わずにstartServiceで呼び出したときは何故か通知の取得ができます。
バインドしたときだけ失敗する理由がよく分かりません。
2ヶ月ほど解決策が見つからず困っています。
よろしくお願いします。
↓アクティビティ public class MainActivity extends Activity { private ServiceConnection connect = new ServiceConnection() { @Override public void onServiceConnected(ComponentName name, IBinder service) { } @Override public void onServiceDisconnected(ComponentName name) { } } @Override protected void onCreate(Bundle bundle) { super.onCreate(bundle); setContentView(R.layout.activity_main); Button bindBtn = (Button)findViewById(R.id.button); startBtn.setOnClickListener(new BtnClickListener()); Button unbindBtn = (Button)findViewById(R.id.button2); stopBtn.setOnClickListener(new BtnClickListener()); }; private class BtnClickListener implements View.OnClickListener { public void onClick(View v) { Intent service; service = new Intent(MainActivity.this, NotificationService.class); switch (v.getId()) { case R.id.button: service = new Intent(MainActivity.this,NotificationService.class); bindService(service, connect, BIND_AUTO_CREATE); break; case R.id.button2: service = new Intent(MainActivity.this,NotificationService.class); unbindService(connect) break; } } }
↓サービスクラス public class NotificationService extends NotificationListenerService { private final IBinder mBinder = new MyServiceLocalBinder(); @Override public int onStartCommand(Intent intent, int flags, int startId) { Log.v("test", "onStartCommand"); return super.onStartCommand(intent, flags, startId); } //通知が発生するとコールされる @Override public void onNotificationPosted(StatusBarNotification sbn) { super.onNotificationPosted(sbn); Log.v("test", "onNotificationPosted"); } @Override public void onCreate() { Log.v("test", "onCreate"); } @Override public IBinder onBind(Intent intent) { Log.v("test", "onBind"); return null; } @Override public boolean onUnbind(Intent intent) { Log.v("test", "onUnbind"); return super.onUnbind(intent); } @Override public void onRebind(Intent intent){ Log.v("test", "onRebind"); } @Override public void onDestroy() { Log.v("test", "onDestroy"); } }
マニフェストに以下を追加 <service android:name=".NotificationService" android:label="@string/app_name" android:permission="android.permission.BIND_NOTIFICATION_LISTENER_SERVICE"> <intent-filter> <action android:name= "android.service.notification.NotificationListenerService" /> </intent-filter> </service>
操作の順番
bindService→通知を発生させる→unbindService
実際の動作ログ
test﹕ onCreate
test﹕ onBind
test﹕ onUnbind
test﹕ onDestroy
↑なぜかonNotificationPostedがコールされない
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/11/27 18:17
2015/11/27 20:09 編集
2015/12/10 15:38 編集