2017-10-02 2 views
0

Mon projet concerne l'enregistreur d'appel.
Je veux quand l'appel reçu, mon activité transparente ouverte avec un bouton. J'ouvre mon activité depuis mon cours de récepteur de diffusion. Dans cette activité, j'ai un bouton bascule pour activer ou désactiver mon application.

Lors d'un appel reçu, si mon bouton bascule est activé, il commence à enregistrer l'appel. cela fonctionne bien mais quand l'appel est fini, je ferme mon activité de ma classe de récepteur de diffusion.
comme ceci: d'abord, ceci est mon activité lorsque l'appel reçu:Fermer l'activité d'un récepteur de diffusion

public class Test extends Activity { 
static Test tes; 
ToggleButton toggleButton; 
TextView txt_disable, txt_enable; 
private static Context context; 
private BroadcastReceiver _closeActivityReceiver = new CloseActivityReceiver(); 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.test); 

    tes = this; 
    IntentFilter filter = new IntentFilter("closeNoInternetActivity"); 
    this.registerReceiver(_closeActivityReceiver, filter); 

    toggleButton = findViewById(R.id.togglebtn); 
    txt_enable = findViewById(R.id.txt_enable); 
    txt_disable = findViewById(R.id.txt_disable); 


    if (isActivityRunning(MainActivity.class)) { 
     MainActivity.getInstance().finish(); 

    } 
    final SharedPreferences pref = getSharedPreferences("TOGGLE", MODE_PRIVATE); 
    boolean sie = pref.getBoolean("STATE", true); 

    if (sie == true) { 
     Log.i("mhs", "true"); 
     //to main activity toggleRecord fal hast pass inja user agar bekhad mitone k disable kone 
     toggleButton.setChecked(true); 
     toggleButton.setText(null); 
     toggleButton.setTextOn(null); 
     toggleButton.setTextOff(null); 
     toggleButton.setBackgroundResource(R.drawable.record_btn); 
     txt_disable.setVisibility(View.VISIBLE); 
     toggleButton.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       toggleRecord.setChecked(false); 
       toggleButton.setBackgroundResource(R.drawable.not_recording_btn); 
       finishAffinity(); 
      } 
     }); 

    } else { 
     Log.i("mhs", "false"); 
     toggleButton.setChecked(false); 
     toggleButton.setText(null); 
     toggleButton.setTextOn(null); 
     toggleButton.setTextOff(null); 
     toggleButton.setBackgroundResource(R.drawable.not_recording_btn); 
     txt_enable.setVisibility(View.VISIBLE); 
     toggleButton.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       toggleRecord.setChecked(true); 
       toggleButton.setBackgroundResource(R.drawable.record_btn); 
       finishAffinity(); 
      } 
     }); 


    } 


} 

protected Boolean isActivityRunning(Class activityClass) { 
    ActivityManager activityManager = (ActivityManager) getBaseContext().getSystemService(Context.ACTIVITY_SERVICE); 
    List<ActivityManager.RunningTaskInfo> tasks = activityManager.getRunningTasks(Integer.MAX_VALUE); 

    for (ActivityManager.RunningTaskInfo task : tasks) { 
     if (activityClass.getCanonicalName().equalsIgnoreCase(task.baseActivity.getClassName())) 
      return true; 
    } 

    return false; 
} 

private class CloseActivityReceiver extends BroadcastReceiver { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     // close this damn activity! 

    } 
} 

@Override 
public void onDestroy() { 
    super.onDestroy(); 
    this.unregisterReceiver(this._closeActivityReceiver); 
} 
public static Test getInstance() { 
    return tes; 
} 
} 

et voici mon récepteur: ici, je commence une activité du récepteur comme ça quand j'ai un appel téléphonique

switch (state) { 
     case TelephonyManager.CALL_STATE_RINGING: 
      isIncoming = true; 
      callStartTime = new Date(); 
      savedNumber = number; 
      onIncomingCallStarted(context, number, callStartTime); 
      Intent i = new Intent(context, Test.class); 
      i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
      context.startActivity(i); 

      Log.i("mhs","zang khord"); 
      break; 
     case TelephonyManager.CALL_STATE_OFFHOOK: 
      if (lastState != TelephonyManager.CALL_STATE_RINGING) { 
       isIncoming = false; 
       callStartTime = new Date(); 
       onOutgoingCallStarted(context, savedNumber, callStartTime); 
       Log.i("mhs","ghat kard"); 
      } else { 
       isIncoming = true; 
       callStartTime = new Date(); 
       onIncomingCallAnswered(context, savedNumber, callStartTime); 
       //vaghti zang mikhore va ghat mikone dar akhar 
       Log.i("mhs","ghatid"); 
       Intent in = new Intent("closeNoInternetActivity"); 
       context.sendBroadcast(in); 
      } 

et ici je fermer comme ceci:

case TelephonyManager.CALL_STATE_OFFHOOK: 
      if (lastState != TelephonyManager.CALL_STATE_RINGING) { 
       isIncoming = false; 
       callStartTime = new Date(); 
       onOutgoingCallStarted(context, savedNumber, callStartTime); 
       Log.i("mhs","ghat kard"); 
      } else { 
       isIncoming = true; 
       callStartTime = new Date(); 
       onIncomingCallAnswered(context, savedNumber, callStartTime); 
       //vaghti zang mikhore va ghat mikone dar akhar 
       Log.i("mhs","ghatid"); 
       Intent in = new Intent("closeNoInternetActivity"); 
       context.sendBroadcast(in); 
      } 

mon problème est que je pense que mon activité ne se ferme pas, et je t rappelle en arrière-plan et provoque mon activité est transparente, puis encore une fois, j'ai un appel téléphonique. mon écran de sonnerie ne s'affiche pas à l'écran. Je pense que si je parvenais à fermer correctement mon activité de test, mon problème a été résolu.

+0

Le plus important: est votre '' BroadcastReceiver' reçoit le Intent' ou non? –

+0

Je démarre l'activité de mon BroadcastReceiver et la termine à nouveau. – user7908469

+0

Il serait probablement judicieux d'utiliser le BroadcastReceiver pour ensuite diffuser un message local indiquant que l'activité peut enregistrer un écouteur car le code permettant de terminer l'activité peut rester dans l'activité plutôt que d'essayer de le fermer en externe. Avez-vous essayé cette approche? – Gapp

Répondre

0

Il suffit de copier et coller le code ci-dessous. ça devrait marcher. Si ce n'est pas le cas, essayez de modifier la méthode de finition, vous pouvez appeler explicitement la méthode destroy si nécessaire.

public class Test extends Activity { 
static Test tes; 
private static Context context; 
ToggleButton toggleButton; 
TextView txt_disable, txt_enable; 
private BroadcastReceiver _closeActivityReceiver = new CloseActivityReceiver(); 

public static Test getInstance() { 
    return tes; 
} 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.test); 

    tes = this; 
    IntentFilter filter = new IntentFilter("closeNoInternetActivity"); 
    this.registerReceiver(_closeActivityReceiver, filter); 

    toggleButton = findViewById(R.id.togglebtn); 
    txt_enable = findViewById(R.id.txt_enable); 
    txt_disable = findViewById(R.id.txt_disable); 


    if (isActivityRunning(MainActivity.class)) { 
     MainActivity.getInstance().finish(); 

    } 
    final SharedPreferences pref = getSharedPreferences("TOGGLE", MODE_PRIVATE); 
    boolean sie = pref.getBoolean("STATE", true); 

    if (sie == true) { 
     Log.i("mhs", "true"); 
     //to main activity toggleRecord fal hast pass inja user agar bekhad mitone k disable kone 
     toggleButton.setChecked(true); 
     toggleButton.setText(null); 
     toggleButton.setTextOn(null); 
     toggleButton.setTextOff(null); 
     toggleButton.setBackgroundResource(R.drawable.record_btn); 
     txt_disable.setVisibility(View.VISIBLE); 
     toggleButton.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       toggleRecord.setChecked(false); 
       toggleButton.setBackgroundResource(R.drawable.not_recording_btn); 
       finishAffinity(); 
      } 
     }); 

    } else { 
     Log.i("mhs", "false"); 
     toggleButton.setChecked(false); 
     toggleButton.setText(null); 
     toggleButton.setTextOn(null); 
     toggleButton.setTextOff(null); 
     toggleButton.setBackgroundResource(R.drawable.not_recording_btn); 
     txt_enable.setVisibility(View.VISIBLE); 
     toggleButton.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       toggleRecord.setChecked(true); 
       toggleButton.setBackgroundResource(R.drawable.record_btn); 
       finishAffinity(); 
      } 
     }); 


    } 


} 

protected Boolean isActivityRunning(Class activityClass) { 
    ActivityManager activityManager = (ActivityManager) getBaseContext().getSystemService(Context.ACTIVITY_SERVICE); 
    List<ActivityManager.RunningTaskInfo> tasks = activityManager.getRunningTasks(Integer.MAX_VALUE); 

    for (ActivityManager.RunningTaskInfo task : tasks) { 
     if (activityClass.getCanonicalName().equalsIgnoreCase(task.baseActivity.getClassName())) 
      return true; 
    } 

    return false; 
} 

@Override 
public void onDestroy() { 
    super.onDestroy(); 
    this.unregisterReceiver(this._closeActivityReceiver); 
} 

public void finish() { 
    super.finish(); 
} 

private class CloseActivityReceiver extends BroadcastReceiver { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     // close this damn activity! 

     finish(); 
    } 
} 

}

+0

rien ne change, mon activité n'est toujours pas fermée. Je ne peux pas comprendre que vous voulez dire "ça devrait marcher, sinon essayez de modifier la méthode de finition, vous pouvez explicitement appeler la méthode" détruire "si nécessaire." – user7908469

+0

Pouvez-vous fournir plus d'informations comme d'où vous envoyez la diffusion et quand? Éditer ta question * – Aks4125

+0

Dans ma diffusion Quand j'ai un appel téléphonique, je commence mon activité et quand l'appel téléphonique est terminé, je finis mon activité de diffusion – user7908469