2015-04-28 2 views
0

Я действительно новичок в Android-программировании. Я работаю над простым приложением: FlashLight для Android.Сохранить приложение, работающее в фоновом режиме на Android

Мне нужно приложение для продолжения работы в фоновом режиме, если пользователь нажимает кнопку меню или блокирует экран. Свет не должен останавливаться, пока пользователь не нажмет кнопку, чтобы остановить свет.

Ниже мой код:

import android.app.Activity; 
import android.app.AlertDialog; 
import android.content.DialogInterface; 
import android.content.pm.PackageManager; 
import android.hardware.Camera; 
import android.hardware.Camera.Parameters; 
import android.media.MediaPlayer; 
import android.media.MediaPlayer.OnCompletionListener; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.View; 
import android.widget.ImageButton; 

public class MainActivity 
     extends Activity { 
    ImageButton btnSwitch; 
    private Camera camera; 
    private boolean isFlashOn; 
    private boolean hasFlash; 
    Parameters params; 
    MediaPlayer mp; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     // flash switch button 
     btnSwitch = (ImageButton) findViewById(R.id.btnSwitch); 
     // First check if device is supporting flashlight or not 
     hasFlash = getApplicationContext().getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA_FLASH); 
     if(!hasFlash) { 
      // device doesn't support flash 
      // Show alert message and close the application 
      AlertDialog alert = new AlertDialog.Builder(MainActivity.this).create(); 
      alert.setTitle("Error"); 
      alert.setMessage("Sorry, your device doesn't support flash light!"); 
      alert.setButton("OK", new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int which) { 
        // closing the application 
        finish(); 
       } 
      }); 
      alert.show(); 
      return; 
     } 
     // get the camera 
     getCamera(); 
     // displaying button image 
     toggleButtonImage(); 
     // Switch button click event to toggle flash on/off 
     btnSwitch.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       if(isFlashOn) { 
        // turn off flash 
        turnOffFlash(); 
       } else { 
        // turn on flash 
        turnOnFlash(); 
       } 
      } 
     }); 
    } 

    // Get the camera 
    private void getCamera() { 
     if(camera == null) { 
      try { 
       camera = Camera.open(); 
       params = camera.getParameters(); 
      } catch(RuntimeException e) { 
       Log.e("Camera Error. Failed to Open. Error: ", e.getMessage()); 
      } 
     } 
    } 

    // Turning On flash 
    private void turnOnFlash() { 
     if(!isFlashOn) { 
      if(camera == null || params == null) { 
       return; 
      } 
      params = camera.getParameters(); 
      params.setFlashMode(Parameters.FLASH_MODE_TORCH); 
      camera.setParameters(params); 
      camera.startPreview(); 
      isFlashOn = true; 
      // changing button/switch image 
      toggleButtonImage(); 
     } 
    } 

    // Turning Off flash 
    private void turnOffFlash() { 
     if(isFlashOn) { 
      if(camera == null || params == null) { 
       return; 
      } 
      params = camera.getParameters(); 
      params.setFlashMode(Parameters.FLASH_MODE_OFF); 
      camera.setParameters(params); 
      camera.stopPreview(); 
      isFlashOn = false; 
      // changing button/switch image 
      toggleButtonImage(); 
     } 
    } 

    /* 
    * Toggle switch button images 
    * changing image states to on/off 
    * */ 
    private void toggleButtonImage() { 
     if(isFlashOn) { 
      btnSwitch.setImageResource(R.drawable.btn_switch_on); 
     } else { 
      btnSwitch.setImageResource(R.drawable.btn_switch_off); 
     } 
    } 

    /* 
* Playing sound 
* will play button toggle sound on flash on/off 
* */ 
    private void playSound() { 
     if(isFlashOn) { 
      mp = MediaPlayer.create(MainActivity.this, R.raw.light_switch_off); 
     } else { 
      mp = MediaPlayer.create(MainActivity.this, R.raw.light_switch_on); 
     } 
     mp.setOnCompletionListener(new OnCompletionListener() { 
      @Override 
      public void onCompletion(MediaPlayer mp) { 
       // TODO Auto-generated method stub 
       mp.release(); 
      } 
     }); 
     mp.start(); 
    } 

    @Override 
    protected void onDestroy() { 
     super.onDestroy(); 
    } 

    @Override 
    protected void onPause() { 
     super.onPause(); 
     // on pause turn off the flash 
     turnOffFlash(); 
    } 

    @Override 
    protected void onRestart() { 
     super.onRestart(); 
    } 

    @Override 
    protected void onResume() { 
     super.onResume(); 
     // on resume turn on the flash 
     if(hasFlash) { 
      turnOnFlash(); 
     } 
    } 

    @Override 
    protected void onStart() { 
     super.onStart(); 
     // on starting the app get the camera params 
     getCamera(); 
    } 

    @Override 
    protected void onStop() { 
     super.onStop(); 
     // on stop release the camera 
     if(camera != null) { 
      camera.release(); 
      camera = null; 
     } 
    } 
} 

ответ

1

Вы выключаете свет в режиме onPause. Когда экран заблокирован или приложение сведено к минимуму, вызывается onPause. Если вы не хотите, чтобы это произошло, не называйте это там.

+0

Спасибо за ваш комментарий. Таким образом, вы понимаете, что, удалив это, он будет работать? – cssnewbie

+0

Да. Хотя, если кто-то еще хочет камеру, которая может вызвать проблемы (потому что вы продолжите ее утверждать). –

+0

Итак, что мне тогда делать? – cssnewbie

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