J'ai un problème et je n'ai vu aucune solution.Mon application SOS ne clignote qu'une seule fois
J'ai créé une application "SOS" qui essaie de faire clignoter la lampe de poche dans le téléphone de l'utilisateur.
Je crée une certaine logique et ce travail comme
Lorsque je clique sur le bouton flash juste startPreview après 2 sec (voir
int mInterval = 2000;
)Je crée booléen,
isFlashOn
, mais cela fonctionne pas et je ne sais pas pourquoi.
S'il vous plaît prendre un 3 minutes pour regarder le code, peut-être vous verrez ce qui est mauvais ici.
public class SOSFragment extends Fragment {
private Context context;
private int mInterval = 2000;
private Handler mHandler = new Handler();
private Runnable mStatusChecker;
private boolean isFlashOn = false;
public SOSFragment() {
}
@Override
public void onAttach(Context context) {
super.onAttach(context);
this.context = context;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public void onDestroy() {
super.onDestroy();
stopRepeatingTask();
}
void stopRepeatingTask() {
mHandler.removeCallbacks(mStatusChecker);
}
private void startRepeatingTask() {
mStatusChecker.run();
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_sos, container, false);
Button btn_exit = (Button) view.findViewById(R.id.btn_exit);
Button btn_sos = (Button) view.findViewById(R.id.btn_sos);
((MainActivity) context).checkCameraPermission();
btn_exit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
((MainActivity) context).closeSOSFragment();
((MainActivity) context).showToolbarFragment();
}
});
btn_sos.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startRunnable();
}
});
return view;
}
private void startRunnable(){
mStatusChecker = new Runnable() {
@Override
public void run() {
final Camera cam = Camera.open();
Camera.Parameters p = cam.getParameters();
p.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH);
cam.setParameters(p);
if(!isFlashOn){
cam.stopPreview();
isFlashOn = true;
}else {
cam.startPreview();
isFlashOn = false;
}
}
};
mHandler.postDelayed(mStatusChecker, mInterval);
startRepeatingTask();
}
}
Jetez un oeil à cette question. Je n'ai rien codé pour Android depuis un moment, mais cela pourrait aider http://stackoverflow.com/questions/6242268/repeat-a-task-with-a-time-delay –