2016-11-10 79 views
-1

在這裏,我創建了一個應用程序,當接收到短信並接到來電時啓動閃光。閃光燈正在接收短信,但沒有通話,爲什麼?誰能幫忙?很多天以來我都陷在這個問題上。在此先感謝,我的代碼如下。 Flash只能接收短信,而不能接收呼叫。期待你的指導。當我搜索有關這個我只得到類和方法來創建我自己的應用程序。請求解釋檢測來電

public class SMSReceiver extends BroadcastReceiver { 
     Boolean call; 
     private Camera camera; 
     int count; 
     long delaytime; 
     Editor editor; 
     String flashtype; 
     private boolean hasFlash; 
     private boolean isFlashOn; 
     private boolean isFlashblinking; 
     private boolean mActive; 
     private Handler mHander; 
     private final Runnable mRunnable; 
     private boolean mSwap; 
     private Context mcontext; 
     AudioManager myAudioManager; 
     String noofblinks; 
     int numbofblink; 
     Parameters params; 
     SharedPreferences pref; 
     StringBuilder result; 
     Boolean ring; 
     Boolean silent; 
     Boolean sms; 
     String timetoblink; 
     Boolean vibrate; 

     public class PhoneListener extends PhoneStateListener { 
      private Context context; 

      public PhoneListener(Context c) { 
       Log.i("CallRecorder", "PhoneListener constructor"); 
       this.context = c; 
      } 

      public void onCallStateChanged(int state, String incomingNumber) { 
       switch (state) { 
       case 0: 
        try { 
         SMSReceiver.this.mHander 
           .removeCallbacks(SMSReceiver.this.mRunnable); 
         if (SMSReceiver.this.camera != null) { 
          SMSReceiver.this.camera.release(); 
         } 
        } catch (Exception e) { 
         try { 
          SMSReceiver.this.camera.release(); 
         } catch (Exception e2) { 
         } 
        } 
       case 1: 
        try { 
         if (SMSReceiver.this.call.booleanValue()) { 
          if (SMSReceiver.this.myAudioManager.getRingerMode() == 0 
            && SMSReceiver.this.silent.booleanValue()) { 
           SMSReceiver.this.flash(); 
          } 
          if (SMSReceiver.this.myAudioManager.getRingerMode() == 1 
            && SMSReceiver.this.vibrate.booleanValue()) { 
           SMSReceiver.this.flash(); 
          } 
          if (SMSReceiver.this.myAudioManager.getRingerMode() == 2 
            && SMSReceiver.this.ring.booleanValue()) { 
           SMSReceiver.this.flash(); 
          } 
         } 
        } catch (Exception e3) { 
        } 
       case 2: 
        try { 
         SMSReceiver.this.mHander 
           .removeCallbacks(SMSReceiver.this.mRunnable); 
         if (SMSReceiver.this.camera != null) { 
          SMSReceiver.this.camera.release(); 
         } 
        } catch (Exception e4) { 
         try { 
          SMSReceiver.this.camera.release(); 
         } catch (Exception e5) { 
         } 
        } 
       default: 
       } 
      } 
     } 

     public SMSReceiver() { 
      this.mHander = new Handler(); 
      this.mActive = false; 
      this.mSwap = true; 
      this.isFlashblinking = true; 
      this.count = 0; 
      this.mRunnable = new Runnable() { 

       @Override 
        // TODO Auto-generated method stub 
        public void run() { 
         try { 
          SMSReceiver sMSReceiver = SMSReceiver.this; 
          sMSReceiver.count++; 
         } catch (Exception e) { 
         } 
         if (SMSReceiver.this.mActive) { 
          if (SMSReceiver.this.count >= SMSReceiver.this.numbofblink * 2) { 
           try { 
            SMSReceiver.this.mHander 
              .removeCallbacks(SMSReceiver.this.mRunnable); 
            SMSReceiver.this.camera.release(); 
           } catch (Exception e2) { 
           } 
          } 
          if (SMSReceiver.this.isFlashOn) { 
           SMSReceiver.this.turnOffFlash(); 
          } else { 
           SMSReceiver.this.turnOnFlash(); 
          } 
          try { 
           SMSReceiver.this.mHander.postDelayed(
             SMSReceiver.this.mRunnable, 
             SMSReceiver.this.delaytime); 
          } catch (Exception e3) { 
          } 
         } 
        } 
      }; 
     } 

     public void onReceive(Context context, Intent intent) { 
      try { 
       this.mcontext = context; 
       this.count = 0; 
       try { 
        this.pref = PreferenceManager 
          .getDefaultSharedPreferences(this.mcontext); 
        this.editor = this.pref.edit(); 
        this.call = Boolean.valueOf(this.pref.getBoolean("call", true)); 
        this.sms = Boolean.valueOf(this.pref.getBoolean("sms", true)); 
        this.timetoblink = this.pref.getString("blinktime", "200"); 
        this.noofblinks = this.pref.getString("noofblinks", "5"); 
        this.ring = Boolean.valueOf(this.pref.getBoolean("ring", true)); 
        this.vibrate = Boolean.valueOf(this.pref.getBoolean("vibrate", 
          true)); 
        this.silent = Boolean.valueOf(this.pref.getBoolean("silent", 
          true)); 
        this.flashtype = this.pref.getString("flashtype", "1"); 
        this.delaytime = Long.parseLong(this.timetoblink); 
        this.numbofblink = Integer.parseInt(this.noofblinks); 
        this.myAudioManager = (AudioManager) this.mcontext 
          .getSystemService("audio"); 
       } catch (Exception e) { 
       } 
       ((TelephonyManager) this.mcontext.getSystemService("phone")) 
         .listen(new PhoneListener(context), 32); 
      } catch (Exception e2) { 
      } 
     } 

     public void flash() { 
      try { 
       this.hasFlash = this.mcontext.getPackageManager().hasSystemFeature(
         "android.hardware.camera.flash"); 
       if (this.hasFlash) { 
        getCamera(); 
        startStrobe(); 
        return; 
       } 
       AlertDialog alert = new Builder(this.mcontext).create(); 
       alert.setTitle("Error"); 
       alert.setMessage("Sorry, your device doesn't support flash light!"); 

       alert.setButton("OK", new OnClickListener() { 

        @Override 
        public void onClick(DialogInterface dialog, int which) { 
         // TODO Auto-generated method stub 

        } 
       }); 
       alert.show(); 
      } catch (Exception e) { 
      } 
     } 

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

     private void turnOnFlash() { 
      try { 
       if (!this.isFlashOn && this.camera != null && this.params != null) { 
        this.params = this.camera.getParameters(); 
        if (this.flashtype.equals("2")) { 
         this.params.setFlashMode("torch"); 
        } else if (this.flashtype.equals("3")) { 
         this.params.setFlashMode("torch"); 
        } else { 
         this.params.setFlashMode("torch"); 
        } 
        this.camera.setParameters(this.params); 
        this.camera.startPreview(); 
        this.isFlashOn = true; 
       } 
      } catch (Exception e) { 
      } 
     } 

     private void turnOffFlash() { 
      try { 
       if (this.isFlashOn && this.camera != null && this.params != null) { 
        this.params = this.camera.getParameters(); 
        this.params.setFlashMode("off"); 
        this.camera.setParameters(this.params); 
        this.camera.stopPreview(); 
        this.isFlashOn = false; 
       } 
      } catch (Exception e) { 
      } 
     } 

     private void startStrobe() { 
      try { 
       this.mActive = true; 
       this.mHander.post(this.mRunnable); 
      } catch (Exception e) { 
      } 
     } 
    } 

回答

0
+0

您是否檢查過我的代碼?我想在我的代碼中進行更改..你能跟蹤我的代碼中的錯誤是什麼,它沒有檢測到閃存在調用 –

+0

好吧,我建議你調試同樣的嘗試添加狀態爲1時烤麪包,並檢查是否出現在來電一旦你看到,你可能會得到一些線索,你可能會錯的 快樂編碼 –

+0

是的,讓我試試,但如果解決方案來請你試試這個 –

0

製作的廣播接收機瞭解來電

寫代碼AndroidManifes.xml

<receiver android:name=".ServiceReceiver" > 
    <intent-filter> 
     <action android:name="android.intent.action.PHONE_STATE" /> 
    </intent-filter> 
</receiver> 

並創建一個新的類。

public class ServiceReceiver extends BroadcastReceiver { 

    @Override 
    public void onReceive(final Context context, Intent intent) { 
     TelephonyManager telephony = (TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE); 
     telephony.listen(new PhoneStateListener(){ 
      @Override 
      public void onCallStateChanged(int state, String incomingNumber)   { 
     if(state.equals(TelephonyManager.EXTRA_STATE_RINGING)){ 
    // Run the flash in that line 
     } 

      } 
     },PhoneStateListener.LISTEN_CALL_STATE); 
    } 
} 
+0

並且還使用Read.phone androidManifest.xml中的狀態 –

+0

無法在基本類型int –

+0

上調用equals(String)對不起,我編寫的代碼沒有任何IDE。 –