Broadcast receiver for Phone State changed not working

前端 未结 3 1766
猫巷女王i
猫巷女王i 2020-12-20 02:44

i have created a broadcast receiver for Phone state change. but the broadcast is not working. i have been trying from couple of hours and tried 2,3 solutions but still its n

3条回答
  •  情深已故
    2020-12-20 03:25

    1. First, define permission in the manifest

      
      
      
      
    2. inside the application tag register the receiver

      
           
               
           
           
               
           
       
      
    3. Ask the permission the startup Activity/Runtime Permission Usually in the MainActivity

      @Override
       protected void onCreate(Bundle savedInstanceState) {
           super.onCreate(savedInstanceState);
           setContentView(R.layout.activity_main);
      
             checkAndRequestPermissions();
      
            }
          private  boolean checkAndRequestPermissions() {
       int readPhoneState = ContextCompat.checkSelfPermission(this, Manifest.permission.READ_PHONE_STATE);
       int read_call_log = ContextCompat.checkSelfPermission(this, Manifest.permission.READ_CALL_LOG);
      
       List listPermissionsNeeded = new ArrayList<>();
      
       if (readPhoneState != PackageManager.PERMISSION_GRANTED) {
           listPermissionsNeeded.add(Manifest.permission.READ_PHONE_STATE);
       }
      
       if (read_call_log != PackageManager.PERMISSION_GRANTED) {
           listPermissionsNeeded.add(Manifest.permission.READ_CALL_LOG);
       }
      
       if (read_call_log != PackageManager.PERMISSION_GRANTED) {
           listPermissionsNeeded.add(Manifest.permission.PROCESS_OUTGOING_CALLS);
       }
      
       if (read_call_log != PackageManager.PERMISSION_GRANTED) {
           listPermissionsNeeded.add(Manifest.permission.INTERNET);
       }
      
       if (!listPermissionsNeeded.isEmpty()) {
           ActivityCompat.requestPermissions(this,
                   (String[]) listPermissionsNeeded.toArray(new String[listPermissionsNeeded.size()]),
                   REQUEST_ID_MULTIPLE_PERMISSIONS);
      
           return false;
       }
       return true;
      }
      
    4. inside the PhoneCallReciver class

       public class CallReceiver extends BroadcastReceiver{
      
      
       @Override
           public void onReceive(Context context, Intent intent) {
      
               try {
      
                   runfirstTime(context,intent);
      
               } catch (Exception ex) {
                   try {
      
                   }
                   catch (Exception e)
                   {
      
                   }
               }
           }
      
      
       private void runfirstTime(Context context, Intent intent) {
      
           TelephonyManager telephony = (TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE);
           MyPhoneStateListener customPhoneListener = new MyPhoneStateListener();
      
           telephony.listen(customPhoneListener, PhoneStateListener.LISTEN_CALL_STATE);
      
           Bundle bundle = intent.getExtras();
           String phone_number = bundle.getString("incoming_number");
      
           String stateStr = intent.getExtras().getString(TelephonyManager.EXTRA_STATE);
           int state = 0;
      
           if(stateStr.equals(TelephonyManager.EXTRA_STATE_IDLE)){
               state = TelephonyManager.CALL_STATE_IDLE;
           }
           else if(stateStr.equals(TelephonyManager.EXTRA_STATE_OFFHOOK)){
               state = TelephonyManager.CALL_STATE_OFFHOOK;
           }
           else if(stateStr.equals(TelephonyManager.EXTRA_STATE_RINGING)){
               state = TelephonyManager.CALL_STATE_RINGING;
           }
      
           if (phone_number == null || "".equals(phone_number)) {
               return;
           }
           customPhoneListener.onCallStateChanged(context, state, phone_number);
          // Here customPhoneListener is a object of the  use context,state,phone_number to get the MyCustomPhonestatelistener class Which extends PhoneStateListener class.
      
       }
      }
      

提交回复
热议问题