2014-09-08 2 views
0

Я использую следующий код с IOIO, чтобы действовать как детектор движения, проблема в том, что IOIO отключается, когда мой экран телефона отключается! Я не хочу, чтобы экран оставался все время, чтобы поддерживать связь с IOIO!Как отключить IOIO при выключении экрана Android?

любое решение пожалуйста?

package com.LookHin.ioio_pir_motion_sensor; 

import ioio.lib.api.AnalogInput; 
import ioio.lib.api.DigitalOutput; 
import ioio.lib.api.exception.ConnectionLostException; 
import ioio.lib.util.BaseIOIOLooper; 
import ioio.lib.util.IOIOLooper; 
import ioio.lib.util.android.IOIOActivity; 
import android.content.Intent; 
import android.graphics.Color; 
import android.media.Ringtone; 
import android.media.RingtoneManager; 
import android.net.Uri; 
import android.os.Bundle; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.widget.TextView; 
import android.widget.Toast; 
import android.widget.ToggleButton; 

public class MainActivity extends IOIOActivity { 

private ToggleButton toggleButton1; 
private TextView textView1; 

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

    textView1 = (TextView) findViewById(R.id.textView1); 
    toggleButton1 = (ToggleButton) findViewById(R.id.toggleButton1); 
} 


@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.main, menu); 
    return true; 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) 
{ 
    switch (item.getItemId()) 
    { 
    case R.id.action_about: 
     //Toast.makeText(getApplicationContext(), "Show About", Toast.LENGTH_SHORT).show(); 

     Intent about = new Intent(this, AboutActivity.class); 
     startActivity(about); 

     return true; 
    default: 
     return super.onOptionsItemSelected(item); 
    } 
} 


class Looper extends BaseIOIOLooper { 

    private DigitalOutput digital_led0; 
    private AnalogInput deigital_input; 
    int i = 0; 

    private float InputStatus; 

    @Override 
    protected void setup() throws ConnectionLostException { 

     digital_led0 = ioio_.openDigitalOutput(0,true); 
     deigital_input = ioio_.openAnalogInput(45); 

     runOnUiThread(new Runnable() { 
      public void run() { 
       Toast.makeText(getApplicationContext(), "IOIO Connect", Toast.LENGTH_SHORT).show(); 
      } 
     }); 

    } 

    @Override 
    public void loop() throws ConnectionLostException { 


     try{ 
      digital_led0.write(!toggleButton1.isChecked()); 

      InputStatus = deigital_input.getVoltage(); 

      runOnUiThread(new Runnable() { 
       @Override 
       public void run() { 

        textView1.setText(String.format("%.02f",InputStatus)+" v."); 

        if(InputStatus >= 3.0){ 
         textView1.setBackgroundColor(Color.RED); 

         if (i == 0){ 
         Uri notification = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); 
         Ringtone r = RingtoneManager.getRingtone(getApplicationContext(), notification); 
         r.play(); 
         i = 1; 
         }; 

        }else{ 
         textView1.setBackgroundColor(Color.TRANSPARENT); 
         i = 0; 
        } 

       } 
      }); 

      Thread.sleep(100); 

     }catch(InterruptedException e){ 
      e.printStackTrace(); 
     } 

    } 
} 


@Override 
protected IOIOLooper createIOIOLooper() { 
    return new Looper(); 
} 

}

+1

Возможно [частичный блокиратор бодрствования] (https://developer.android.com/training/scheduling/wakelock.html#cpu)? –

+0

Я позабочусь об этом, спасибо Стивену. –

ответ

0

Вариант 1) Блокировка экрана, так что всегда бодрствует

public void onCreate(Bundle savedInstanceState) { 
    getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); 

Вариант 2) Закрепите ваш ответ на OnPause().

Когда экран выключен, вызывается метод onPause(), и вы должны обращаться с ним, иначе ваша деятельность будет закрыта.

@Override 
protected void onPause() { 
    // Your code 
    super.onPause(); 
} 

OnPause() обычно вызывает ioio.disconnect() так что это должно быть отменяют.

0

IOIOService давайте запустим ваш код на фоне, даже если приложение переходит на задний план.

Смежные вопросы