Call Detection for skype in android

前端 未结 2 648
我在风中等你
我在风中等你 2020-12-17 01:50

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

相关标签:
2条回答
  • 2020-12-17 02:22

    No bro their are no buddy listener for skype like telephony call or other way use skype for windows or android tools better work hard layer and yard way to posstion on the diffrent topics.

    0 讨论(0)
  • 2020-12-17 02:28

    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);
            }
        }
    };
    
    0 讨论(0)
提交回复
热议问题