How to kill or restart Activity in second display?

61 Views Asked by At

My app has two button, first button will show a new Activity on second screen, and second button will update that Activity with some data.

But once the second Activity started, I cannot startActivity again. Also, I cannot kill the second Activity. How can I kill the Activity and then restart it?

public class MainActivity extends AppCompatActivity {

    private ActivityMainBinding binding;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        binding = ActivityMainBinding.inflate(getLayoutInflater());
        setContentView(binding.getRoot());

        binding.btnShowScreen.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                showSecondDisplay();
            }
        });

        binding.btnSetData.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                showSecondDisplayWithData();
            }
        });
    }

    private void showSecondDisplay(){
        DisplayManager displayManager = (DisplayManager)getSystemService(Context.DISPLAY_SERVICE);
        Display[] displays = displayManager.getDisplays();
        if(displays.length > 1){
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
                ActivityOptions options = ActivityOptions.makeBasic();
                options.setLaunchDisplayId(displays[1].getDisplayId());
                startActivity(
                        new Intent(this, MainActivity2.class),
                        options.toBundle()
                );
            }
        }else{
            Toast.makeText(this,"No second display", Toast.LENGTH_SHORT).show();
        }

    }
    private void showSecondDisplayWithData(){
        DisplayManager displayManager = (DisplayManager)getSystemService(Context.DISPLAY_SERVICE);
        Display[] displays = displayManager.getDisplays();
        if(displays.length > 1){
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
                ActivityOptions options = ActivityOptions.makeBasic();
                options.setLaunchDisplayId(displays[1].getDisplayId());
                Intent intent = new Intent(this, MainActivity2.class);
                intent.putExtra("data", "this is data");
                startActivity(intent, options.toBundle());
            }
        }else{
            Toast.makeText(this,"No second display", Toast.LENGTH_SHORT).show();
        }

    }
}


public class MainActivity2 extends AppCompatActivity {

    private ActivityMain2Binding binding;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        binding = ActivityMain2Binding.inflate(getLayoutInflater());
        setContentView(binding.getRoot());

        Bundle extras = getIntent().getExtras();
        if (extras != null) {
            String data = extras.getString("data");
            binding.viewData.setText(data);
        }
    }
}
0

There are 0 best solutions below