startActivity en accidente de clase Java

Steve:

Estoy desarrollando una aplicación para Android para un proyecto escolar y tengo el siguiente problema. Tengo una MainActivitycon una Buttony una SecondActivity. Cuando hago clic en el botón en el MainActivityque tiene que abrir el SecondActivity. Lo he comprobado en mis dos dispositivos (Samsung Galaxy S9 + y asus zenfone2):

MainActivity.java

public class MainActivity extends AppCompatActivity {
    Button button;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        button=(Button)findViewById(R.id.button);

        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent=new Intent(MainActivity.this,SecondActivity.class)
                startActivity(intent);
            }
        });
}
}

Esto funciona bien en ambos dispositivos y cuando hago clic en el botón se abre correctamente el SecondActivity.

El problema es cuando agrego una clase controlador y tratar de empezar el SecondActivityen ella. Esta es la clase del controlador:

Controller.java

public class Controller {
    public void open(Context cont){
        Intent intent=new Intent(cont,SecondActivity.class);
        cont.getApplicationContext().startActivity(intent);
     }
  }

Y cambio la MainActivitysiguiente manera:

public class MainActivity extends AppCompatActivity {
    Button button;
    Controller c;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        button=(Button)findViewById(R.id.button2);
        c=new Controller();

        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                c.open(getApplicationContext());
            }
        });
}
}

Esto funciona muy bien en mi S9 +, mientras que en mis accidentes zenfone2 cuando hago clic en el botón. ¿Dónde está el problema? si no es correcta, ¿por qué funciona en S9 +?

Gracias

MidasLefko:

A partir de Android P no se puede iniciar una actividad con el contexto de aplicación a menos que agregue bandera Intent.FLAG_ACTIVITY_NEW_TASK. Así que acaba de cambiar su controlador y mainactivity utilizar el contexto mainactivity lugar.

c.open(MainActivity.this);

public void open(Context context) {
    Intent intent = new Intent(context, SecondActivity.class);
    context.startActivity(intent);
}

O

public void open(Context context) {
    Intent intent = new Intent(context.getApplicationContext(), SecondActivity.class);
    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    context.startActivity(intent);
}

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=205185&siteId=1
Recomendado
Clasificación