2016-09-05 9 views
1

親アクティビティに子アクティビティから戻ったときに近接センサーをオフにする方法。私の子アクティビティのとonDestroyに登録されていない近接センサがありましたが、まだオンのままです。 近接センサーをオンにしてコール終了アプリと同じように顔に近づくと近接センサーをオフにして子アクションに戻るが、近接センサーはまだオンのままです。私は親アクティビティに戻っていたときに<em>近接センサー</em>はまだオンのまま、私は正常に動作しますが、私の子アクティビティに<em>近接センサ</em>をとっている

マイChildActivityは以下の通りである:前面に移動された場合Activityは、別のアクティビティから復帰する場合には、それが同様に呼び出されたときに

Toolbar toolbar; 
ActionBar actionBar; 

private SensorManager mSensorManager; 
private Sensor mProximity; 
PowerManager pm; 
PowerManager.WakeLock wakeLock; 
private static final String MYLOCK=ProximitySensorActivity.class.getSimpleName(); 

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

    toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 
    actionBar=getSupportActionBar(); 
    actionBar.setTitle("Proximity Sensor"); 
    actionBar.setDisplayHomeAsUpEnabled(true); 
    actionBar.setHomeAsUpIndicator(R.drawable.left); 

    mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE); 
    mProximity = mSensorManager.getDefaultSensor(Sensor.TYPE_PROXIMITY); 


} 

@Override 
public void onSensorChanged(SensorEvent event) { 

    float distance = event.values[0]; 

    if(event.sensor.getType()==Sensor.TYPE_PROXIMITY) { 
     pm = (PowerManager) getSystemService(Context.POWER_SERVICE); 
     wakeLock = pm.newWakeLock(PowerManager.PROXIMITY_SCREEN_OFF_WAKE_LOCK, MYLOCK); 

     if (distance<1 && wakeLock!=null){ 
      if (!wakeLock.isHeld()){ 
       wakeLock.acquire(); 
      } 
     }else if (wakeLock!=null){ 
      if (wakeLock.isHeld()) { 
       wakeLock.release(); 
       getWindow().addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD); 
       getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); 
      } 

     } 

    } 

} 

@Override 
public void onAccuracyChanged(Sensor sensor, int i) { 

} 

@Override 
protected void onResume() { 
    super.onResume(); 
    mSensorManager.registerListener(this, mProximity, SensorManager.SENSOR_DELAY_NORMAL); 

} 

@Override 
protected void onPause() { 
    super.onPause(); 
    if (wakeLock.isHeld()) { 
     wakeLock.release(); 
    } 
    mSensorManager.unregisterListener(this); 
} 

@Override 
protected void onDestroy() { 
    super.onDestroy(); 
    if (wakeLock.isHeld()) { 
     wakeLock.release(); 
    } 
    mSensorManager.unregisterListener(this); 
} 


@Override 
public boolean onOptionsItemSelected(MenuItem item) { 

    int id=item.getItemId(); 
    if (id == android.R.id.home) { 
     finish(); 
     return true; 
    } 
    return super.onOptionsItemSelected(item); 
} 

答えて

0

onResume();
onResume();でそれをあなたの登録が呼び出されます。
これを防ぐには、受信者の登録を解除するときにフラグを作成し、でtrueに設定します。そしてonResume()でそのフラグをチェックしてください。

0

だけ

@Override 
public void onBackPressed() { 
    mSensorManager.unregisterListener(this); 
} 

あなたのコードにこれを追加するには、それはあなたの問題はここにonPause()および/またはonDestroy()wakeLockである

+0

これは動作しません:( – Kesha

0

の作品を願っています。

@Override 
protected void onPause() { 
    super.onPause(); 
    if (wakeLock!= null) { 
     wakeLock.release(); 
    } 
    mSensorManager.unregisterListener(this); 
} 

@Override 
protected void onDestroy() { 
    super.onDestroy(); 
    if (wakeLock!= null) { 
     wakeLock.release(); 
    } 
    mSensorManager.unregisterListener(this); 
} 

私はWakeLock.isHeld()はfalseを返す保持何らかの理由で、wakeLock!= nullwakeLock.isHeld()を交換したノート。その後もWakeLock.acquire()と呼ばれています。

あなたはonPause()にwakelockをリリースするだけです。

+0

これは私に例外を与えます:java.lang.RuntimeException:アクティビティを停止することができません{com.app2.apptwo/com.app2.apptwo.ProximitySensorActivity}:java.lang.RuntimeException:WakeLock under -locked ProximitySensorActivity – Kesha

+0

私のために働く、プロジェクト全体とアクティビティを作成して、ここで何が間違っているかを見てみましょう。あなたはすべてを正しく行ったと思いますか?「アクティビティライフサイクル」問題があるように思えます。 – Abbas

関連する問題

 関連する問題