2016-12-16 4 views
6

काम नहीं किया मैं अपने अनुप्रयोग में एसओएस मॉड्यूल की तरह विकल्प बनाने कोशिश कर रहा हूँ, मैं इस संभाल करने के लिए कोड बनाने के लिए:विकल्प SOSModule तरह

class SOSModule { 
private Camera camera; 
private Camera.Parameters params; 
private boolean isFlashOn; 

void blink(final int delay, final int times) { 
    Thread t = new Thread() { 
     public void run() { 
      try { 

       for (int i=0; i < times*2; i++) { 
        if (isFlashOn) { 
         turnOffFlash(); 
        } else { 
         Camera.open(); 
         turnOnFlash(); 
        } 
        sleep(delay); 
       } 

      } catch (Exception e){ 
       e.printStackTrace(); 
      } 
     } 
    }; 
    t.start(); 
} 

void turnOnFlash() { 
    if (!isFlashOn) { 
     if (camera == null || params == null) { 
      return; 
     } 
     params = camera.getParameters(); 
     params.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH); 
     camera.setParameters(params); 
     camera.startPreview(); 
     isFlashOn = true; 
    } 

} 

void turnOffFlash() { 
    if (isFlashOn) { 
     if (camera == null || params == null) { 
      return; 
     } 
     params = camera.getParameters(); 
     params.setFlashMode(Camera.Parameters.FLASH_MODE_OFF); 
     camera.setParameters(params); 
     camera.stopPreview(); 
     isFlashOn = false; 
    } 
} 

}

मैं भी प्रकट में सभी आवश्यक अनुमतियां जोड़ सकते हैं और बेशक मैं समय पर उपयोग की अनुमति की जांच करता हूं।

लेकिन यह कोई काम नहीं है। मैं बस अन्य कोड बना देता हूं लेकिन बिना किसी चक्र के "एक फ्लैश" की तरह काम करता हूं।

क्या आप लोग मेरी मदद कर सकते हैं?

दोस्तों यह मेरे लिए महत्वपूर्ण है, मैं यह नहीं कर सकता क्योंकि मेरे हूवेई पी 8 लाइट और पी 9 लाइट इस खुशी को देखते हैं, यह एक हूवेई सॉफ़्टवेयर समस्या है, कैमरे के साथ मुझे इसे मानसिक डिवाइस पर परीक्षण करने की आवश्यकता है, और इसकी एक बड़ी समस्या है कि मेरे पास उपकरणों से कोई लॉग नहीं है।

public void flash_effect() throws InterruptedException 
{ 
    cam = Camera.open(); 
    final Camera.Parameters p = cam.getParameters(); 
    p.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH); 


    Thread a = new Thread() 
    { 
     public void run() 
     { 
      for(int i =0; i < 10; i++) 
      { 
       cam.setParameters(p); 
       cam.startPreview(); 
       try { 
        Thread.sleep(50); 
       } catch (InterruptedException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } 
       cam.stopPreview(); 
       try { 
        Thread.sleep(50); 
       } catch (InterruptedException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } 

      } 
     } 
    }; 
    a.start(); 
}} 

इस कोड काम किया, लेकिन फ्लैश किसी भी झपकी प्रभाव किसी भी विचार के बिना अनंत के लिए खुला है ??

+0

यह दुर्घटना है और एक अपवाद फेंक या यह बस एसओएस बटन प्रेस पर कुछ भी नहीं करता है? –

+0

पहले एक समान मुद्दा था http://stackoverflow.com/questions/39055659/thread-interrupt-alternatives –

+0

जब मैं एसओएस बटन – Rodriquez

उत्तर

0

इसकी वजह से अपने धागा रन

बुलाया नहीं है की कोशिश करो इस

void blink(final int delay, final int times) { 
    Thread t = new Thread(new Runnable() { 
     @Override 
     public void run() { 

      try { 

       for (int i=0; i < times*2; i++) { 
        if (isFlashOn) { 
         turnOffFlash(); 
        } else { 
         turnOnFlash(); 
        } 
        Thread.sleep(delay); 
       } 

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

     } 
    }); 

    t.start(); 
} 

तुम यहाँ और अधिक पढ़ सकते

Thread: Not calling run method

1

आपको एक ध्वज की आवश्यकता है जो आपके धागे को रोकने के लिए कहता है।

boolean shouldStop = false; 

    while (!shouldStop){ 
     if(FlashOn){ 
     ...//do SOS stuff 
     } 
    } 

    public void endSOS(){ 
     shouldStop = true; 
    } 
+0

मुझे इस ध्वज को थ्रेड में रखना चाहिए? – Rodriquez

+0

रन फ़ंक्शन में, हां। –

+0

कोशिश की लेकिन काम नहीं किया – Rodriquez

संबंधित मुद्दे