Like the telephony call detection using phoneStateListener , I want to detect the call from Skype in android. Is there any listener for Skype like for telephony call. Please suggest some way.
Thanks to my friend Shazli, There is a reliable workaround to solve this issue.
Whenever skype call gets connected it puts up a notification and on ending the call it removes the notification. NotificationListenerService can be used to detect the skype notification.
Add below lines in the manifest file.
<service android:name=".SkypeNotificationListenerService"
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>
Create a service to listen the notifications.
public class SkypeNotificationListenerService extends NotificationListenerService {
private boolean mSkypeConnected;
private static final String TAG = "NM";
public SkypeNotificationListenerService() {
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
return super.onStartCommand(intent, flags, startId);
}
@Override
public void onCreate() {
super.onCreate();
Log.d(TAG, "Service created");
IntentFilter filter = new IntentFilter();
filter.addAction("com.example.NOTIFICATION_LISTENER");
LocalBroadcastManager.getInstance(this)
.registerReceiver(nlServiceReceiver, filter);
}
@Override
public void onDestroy() {
super.onDestroy();
LocalBroadcastManager.getInstance(this)
.unregisterReceiver(nlServiceReceiver);
}
@Override
public IBinder onBind(Intent intent) {
return super.onBind(intent);
}
@Override
public void onNotificationPosted(StatusBarNotification sbn) {
super.onNotificationPosted(sbn);
String packageName = sbn.getPackageName();
Log.d(TAG, "onNotificationPosted " + packageName);
if(packageName != null && packageName.equals("com.skype.raider")) {
Intent intent = new Intent("com.example.NOTIFICATION_LISTENER");
intent.putExtra("connected", true);
LocalBroadcastManager.getInstance(this).sendBroadcast(intent);
}
}
@Override
public void onNotificationRemoved(StatusBarNotification sbn) {
super.onNotificationRemoved(sbn);
String packageName = sbn.getPackageName();
Log.d(TAG, "onNotificationRemoved " + packageName);
if(packageName != null && packageName.equals("com.skype.raider")) {
Intent intent = new Intent("com.example.NOTIFICATION_LISTENER");
intent.putExtra("connected", false);
LocalBroadcastManager.getInstance(this).sendBroadcast(intent);
}
}
@Override
public StatusBarNotification[] getActiveNotifications() {
return super.getActiveNotifications();
}
BroadcastReceiver nlServiceReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
if(intent != null) {
boolean connected = intent.getBooleanExtra("connected", false);
Intent skypeIntent;
skypeIntent = new Intent(Constants.SKYPE_CONNECTED);
if(connected && !mSkypeConnected) {
mSkypeConnected = true;
skypeIntent.putExtra("connected", true);
} else if(!connected) {
mSkypeConnected = false;
Log.d(TAG, "send broadcast disconnected");
skypeIntent.putExtra("connected", false);
}
sendStickyBroadcast(skypeIntent);
}
}
};
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With