2017-07-10 5 views
0

Ich versuche es so zu machen, dass, wenn Sie den Netzschalter drücken, um den Android auszuschalten, meine App in den Hintergrundmodus geht. Wenn Sie den Netzschalter drücken, um den Android einzuschalten, sollte meine App in den Vordergrundmodus wechseln.Toggle Hintergrund/Vordergrund Modi

Der Fehler, den ich bekommen ist:

java.lang.RuntimeException: Fehler { act = android.intent.action.SCREEN_ON flg = 0x50000010}

Der Fehler kommt Intent Rundfunkempfangs von der Absicht, mit FLAG_ACTIVITY_CLEAR_TOP

Hier ist der MainActivity:

public class MainActivity extends AppCompatActivity { 

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

      IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_ON); 
      filter.addAction(Intent.ACTION_SCREEN_OFF); 
      BroadcastReceiver mReceiver = new ScreenReceiver(MainActivity.this, this); 
      registerReceiver(mReceiver, filter); 

      moveTaskToBack(true); 
     } 
    } 

Hier ist der BroadcastReceiver:

public class ScreenReceiver extends BroadcastReceiver { 

    MainActivity mainAct; 
    Context ctx; 
    public ScreenReceiver(MainActivity act, Context con) { 
     mainAct = act; 
     ctx = con; 
    } 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) { 
      mainAct.moveTaskToBack(true); 
      System.out.println("OFF"); 
     } else if (intent.getAction().equals(Intent.ACTION_SCREEN_ON)) { 
      Intent i = new Intent(ctx, ScreenReceiver.class); 
      i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP); 
      mainAct.startActivity(i); 
      System.out.println("ON"); 
     } 
    } 

} 

I-Code aus der folgenden Tutorial bin mit:

https://thinkandroid.wordpress.com/2010/01/24/handling-screen-off-and-screen-on-intents/

Antwort

0

Der Fehler ScreenReceiver.class vorging in der Absicht statt MainActivity.class. Hier ist die korrigierte Version:

public class ScreenReceiver extends BroadcastReceiver { 

    MainActivity mainAct; 
    Context ctx; 
    public ScreenReceiver(MainActivity act, Context con) { 
     mainAct = act; 
     ctx = con; 
    } 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) { 
      mainAct.moveTaskToBack(true); 
      System.out.println("OFF"); 
     } else if (intent.getAction().equals(Intent.ACTION_SCREEN_ON)) { 
      Intent i = new Intent(ctx, MainActivity.class); 
      i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP); 
      mainAct.startActivity(i); 
      System.out.println("ON"); 
     } 
    } 

}