我想做一個按鈕,將改變Android棒棒糖中的中斷過濾器(無,優先,全部)。當我按下按鈕時,日誌顯示W/NotificationListenerService[NotificationService]: Notification listener service not yet bound.
並且不會更改中斷過濾器。我收到了"NLS Started"
和"NLS Bound"
日誌。爲什麼它給我這個警告?這裏是我的代碼:Android:服務「尚未綁定」,但onBind()被稱爲?
MainActivity.java
:
public class MainActivity extends Activity {
private NotificationService notifs;
private ServiceConnection connection;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
notifs = new NotificationService();
connection = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
Log.d("NOTIF", "NLS Started");
NotificationService.ServiceBinder binder = (NotificationService.ServiceBinder)service;
notifs = binder.getService();
}
@Override
public void onServiceDisconnected(ComponentName name) {
Log.d("NOTIF", "NLS Stopped");
}
};
Intent intent = new Intent(this, NotificationService.class);
startService(intent);
bindService(intent, connection, Context.BIND_AUTO_CREATE);
final Button b = (Button) findViewById(R.id.b);
b.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (notifs.getCurrentInterruptionFilter() == NotificationService.INTERRUPTION_FILTER_NONE) {
//set all
b.setBackground(ContextCompat.getDrawable(MainActivity.this, R.drawable.ic_ring_volume));
notifs.requestInterruptionFilter(NotificationService.INTERRUPTION_FILTER_ALL);
} else if (notifs.getCurrentInterruptionFilter() == NotificationListenerService.INTERRUPTION_FILTER_PRIORITY) {
//set none
b.setBackground(ContextCompat.getDrawable(MainActivity.this, R.drawable.ic_ring_off));
notifs.requestInterruptionFilter(NotificationService.INTERRUPTION_FILTER_NONE);
} else {
//set priority
b.setBackground(ContextCompat.getDrawable(MainActivity.this, R.drawable.ic_ring_priority));
notifs.requestInterruptionFilter(NotificationService.INTERRUPTION_FILTER_PRIORITY);
}
}
});
}
@Override
public void onDestroy() {
super.onDestroy();
unbindService(connection);
connection = null;
}
}
NotificationService.java
:
public class NotificationService extends NotificationListenerService {
private final IBinder binder = new ServiceBinder();
private boolean isBound = false;
public NotificationService() {
}
public class ServiceBinder extends Binder {
NotificationService getService() {
return NotificationService.this;
}
}
@Override
public IBinder onBind(Intent intent) {
isBound = true;
Log.d("NOTIF", "NLS Bound");
return binder;
}
@Override
public int onStartCommand(Intent intent, int flags, int startid) {
return START_STICKY;
}
@Override
public void onCreate() {
super.onCreate();
Log.d("NOTIF", "Started");
Toast.makeText(NotificationService.this, "NLS Started", Toast.LENGTH_SHORT).show();
}
@Override
public void onDestroy() {
super.onDestroy();
}
public boolean isBound() {
return isBound;
}
}
您是否在聲明中聲明'NotificationService'與[documentation](http://developer.android.com/reference/android/service/notification/NotificationListenerService.html)中顯示的相同? –
發佈您的清單 –
感謝您的回覆,我已在清單中正確聲明瞭它是@qbix誰給了我正確的解決方案。 – yawers