关闭广播接收器的活动

时间:2017-10-02 07:41:08

标签: java android android-activity broadcastreceiver

我的项目是关于通话记录器 我希望收到电话时,我的透明活动会打开一个按钮。 我从我的广播接收机课上打开了我的活动 在此活动中,我有一个切换按钮来激活或停用我的应用程序 收到呼叫时,如果我的切换按钮打开,它将开始记录呼叫。 它工作正常,但是当通话完成后,我会从我的广播接收器类中关闭我的活动 像这样:首先,这是我收到电话时的活动:

   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;
}
}

这是我的接收者: 在这里,当我接到电话时,我会从接收器开始这样的活动

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);
            }

在这里我这样关闭它:

   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);
            }

我的问题是,我认为我的活动并没有关闭,它在后台提醒并导致我的活动是透明的,然后我再次打电话。我的铃声屏幕没有显示。 我想如果我能够以正确的方式关闭我的测试活动,我的问题就解决了。

1 个答案:

答案 0 :(得分:0)

只需复制并粘贴下面的代码即可。它应该工作。如果没有,则尝试修改finish方法,如果需要,可以显式调用destroy方法。

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();
    }
}

}