Reputation: 1
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
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