2017-09-11 2 views
0

Je cherchais des exemples.Android BroadcastReceiver ne fonctionne pas les appels téléphoniques

Mon look classe comme:

<pre><code> 

package com.example.pjimnez.samsung_auto_reply; 

import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.content.IntentFilter; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.telephony.PhoneStateListener; 
import android.telephony.SmsManager; 
import android.telephony.TelephonyManager; 
import android.widget.Button; 
import android.widget.TextView; 
import android.view.View; 
import android.widget.Toast; 
import android.content.Intent; 
import android.content.IntentFilter; 


public class MainActivity extends AppCompatActivity { 

     //IntentFilter screenStateFilter; 
     Button btnStart; 
     TextView txtHome; 


     //PhoneState oPhoneState; 

     IntentFilter filter1; 



     private final BroadcastReceiver myPhoneState = new BroadcastReceiver() { 
      @Override 
      public void onReceive(Context context, Intent intent) { 
       String state = intent.getStringExtra(TelephonyManager.EXTRA_STATE); 

       if (state == null) { 

        //Outgoing call 
        String number = intent.getStringExtra(Intent.EXTRA_PHONE_NUMBER); 

        Toast.makeText(context, number, Toast.LENGTH_LONG).show(); 

       } else if (state.equals(TelephonyManager.EXTRA_STATE_OFFHOOK)) { 

        //Log.e("tag", "EXTRA_STATE_OFFHOOK"); 

        Toast.makeText(context, "EXTRA_STATE_OFFHOOK", Toast.LENGTH_LONG).show(); 

       } else if (state.equals(TelephonyManager.EXTRA_STATE_IDLE)) { 

        //Log.e("tag", "EXTRA_STATE_IDLE"); 
        Toast.makeText(context, "EXTRA_STATE_IDLE", Toast.LENGTH_LONG).show(); 

       } else if (state.equals(TelephonyManager.EXTRA_STATE_RINGING)) { 

        //Incoming call 
        String number = intent.getStringExtra(TelephonyManager.EXTRA_INCOMING_NUMBER); 
        //Log.e("tag", "Incoming number : " + number); 
        Toast.makeText(context, number, Toast.LENGTH_LONG).show(); 

       } else 
        Toast.makeText(context, "none", Toast.LENGTH_LONG).show(); 
      } 


     }; 







     @Override 
     protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.activity_main); 


      filter1 = new IntentFilter(TelephonyManager.ACTION_PHONE_STATE_CHANGED); 
      registerReceiver(this.myPhoneState, filter1); 


      btnStart = (Button) findViewById(R.id.btnStart);// Instancia del objeto boton intro 

      //No funciona en modo escucha 
      btnStart.setOnClickListener(new View.OnClickListener() { 
       public void onClick(View v) { 


        txtHome = (TextView) findViewById(R.id.txtHome); 
        txtHome.setText("Dio click en el boton!");//cambio el contenido del TextView 

        //Envia el mensahe SMS 
        /* 
        SmsManager smsManager = SmsManager.getDefault(); 
        smsManager.sendTextMessage("5524234613", null, "Mensaje de prueba", null, null); 
        */ 
       } 
      }); 


     } 




    } 

    enter code here 

</code></pre> 

Mon manifeste dispose d'autorisations à:

android.permission.READ_PHONE_STATE

android.permission.RECEIVE_SMS

android.permission.SEND_SMS

Le problème est que mon application ne jamais afficher le message sur l'état de changement de téléphone

je ne sais pas ce qui est est le problème avec le BroadcastReceiver

Pourriez-vous helpme

Répondre

-1

Essayez ceci:

1- ajouter une PhoneStateBroadcastReceiver de classe qui étend BroadcastReceiver et écraser OnReceive()

2- lors de l'exécution, demande la permission de PHONE_STATE initial

ActivityCompat.requestPermissions(myMainActivity, 
     new String[]{Manifest.permission.READ_PHONE_STATE}, 
     READ_PHONE_STATE_CODE); 

et donner via le dialogue système

3- faire un appel téléphonique

Vous verrez l'intention pris dans OnReceive():

intention

: {intention act = android.intent .action.READ_PHONE_STATE FLG = 0x10 = cmp com.myApp.network.PhoneStateBroadcastReceiver (a extras)} action: android.intent.action.PHONE_STATE

Hope it helps

+0

Vous voulez expliquer ce qu'il fait et comment/pourquoi il résout le problème? – FWeigl