develop456
develop456

Reputation: 1

How to set the popup when there is an incoming call in Android (Overlay)?

I am creating an Android app like truecaller. So I want a set popup when an incoming or outgoing call is started.

I know how to setup a broadcast receiver, but I can't set the popup through it.

Upvotes: 0

Views: 379

Answers (1)

develop456
develop456

Reputation: 1

When starting this service in call Receiver, you can set popup using this code:

public class ChatHead extends Service{

private WindowManager windowManager;
private ImageView chatHead;
WindowManager windowManager2;
String phoneNumber;
@Nullable
@Override
public IBinder onBind(Intent intent) {

    return null;
}

@Override public void onCreate() {
    super.onCreate();

}

@Override
public int onStartCommand(Intent intent, int flags, int startId) {


    phoneNumber =  intent.getStringExtra("PhoneNumber");
    Log.d("newtag","StartService"+phoneNumber);



    windowManager2 = (WindowManager)getSystemService(WINDOW_SERVICE);


    LayoutInflater layoutInflater=(LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View view=layoutInflater.inflate(R.layout.header_file, null);

    Button btn1 = view.findViewById(R.id.button2);
    btn1.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Log.d("newtag","Click Chat");

            windowManager2.removeViewImmediate(view);
        }
    });



    TextView number_txt = view.findViewById(R.id.incoming_number);
    number_txt.setText(phoneNumber);


    WindowManager.LayoutParams params=new WindowManager.LayoutParams(
            WindowManager.LayoutParams.MATCH_PARENT,
            WindowManager.LayoutParams.WRAP_CONTENT,
            WindowManager.LayoutParams.TYPE_PHONE,
            WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
            PixelFormat.TRANSLUCENT
    );

    params.gravity= Gravity.TOP|Gravity.CENTER;
    params.x=0;
    params.y=0;
    windowManager2.addView(view, params);

    return super.onStartCommand(intent, flags, startId);


}

@Override
public void onDestroy() {
    super.onDestroy();
    if (chatHead != null){

        windowManager2.removeViewImmediate(chatHead);
    }
}

}

You can start the service like this:

public class CallReceiver extends BroadcastReceiver {
    String phone_number;

@Override
public void onReceive(Context context, Intent intent) {


        String number = intent.getStringExtra(TelephonyManager.EXTRA_INCOMING_NUMBER);

    if (intent.getStringExtra(TelephonyManager.EXTRA_STATE).equals(TelephonyManager.EXTRA_STATE_OFFHOOK)){

        Log.i("newtag","outgoing number : "+number);


        Toast.makeText(context, "Call Start...!", Toast.LENGTH_SHORT).show();
        Intent intent1= new Intent(context,ChatHead.class);

        intent1.putExtra("PhoneNumber",number);
        context.startService(intent1);

    }else if (intent.getStringExtra(TelephonyManager.EXTRA_STATE).equals(TelephonyManager.EXTRA_STATE_IDLE)){
        Toast.makeText(context, "Call End...!", Toast.LENGTH_SHORT).show();

        Intent intent1= new Intent(context,ChatHead.class);
        context.stopService(intent1);

    }else if (intent.getStringExtra(TelephonyManager.EXTRA_STATE).equals(TelephonyManager.EXTRA_STATE_RINGING)){
        Log.i("newtag","Incoming number : "+number);
        Toast.makeText(context, "Incoming Call...!!", Toast.LENGTH_SHORT).show();
        Intent intent1= new Intent(context,ChatHead.class);

        intent1.putExtra("PhoneNumber",number);
        context.startService(intent1);

    }
}

}

Also you need to add service to manifest file like this :

<service
       android:name=".ChatHead"
        android:label="My Service" >
    </service>

Upvotes: 0

Related Questions