2017-07-10 11 views
0

私は、アンドロイドをオフにするために電源ボタンを押すと、私のアプリはバックグラウンドモードになるようにしようとしています。パワーボタンを押してアンドロイドをオンにすると、アプリはフォアグラウンドモードになります。背景/前景モードを切り替える

私が手にエラーがある:

java.lang.RuntimeException:エラー放送受信テント{ 行為= android.intent.action.SCREEN_ON FLG = 0x50000010}

エラーが来ます

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); 
     } 
    } 
:FLAG_ACTIVITY_CLEAR_TOPここ

との意図からMainActivityです

ここで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"); 
     } 
    } 

} 

私は次のチュートリアルからコードを使用しています:

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

答えて

0

ミスが意図にScreenReceiver.classの代わりMainActivity.classを渡しました。訂正されたバージョン:

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

} 
関連する問題