2016-11-10 75 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。 –