2016-11-10 11 views
-1

Hier erstelle ich eine Anwendung, um Flash zu starten, wenn eine SMS empfangen wird und ein eingehender Anruf empfangen wird. Der Flash arbeitet an empfangenen SMS, aber nicht auf Abruf, warum? Kann jemand helfen? Ich stecke seit vielen Tagen darauf fest. Vielen Dank im Voraus, mein Code ist unten angegeben. Flash funktioniert nur beim Empfangen von SMS, nicht aber beim Empfangen von Anrufen. Erwarte deine Führung. Als ich danach suchte, erhalte ich nur die Klassen und Methoden, um meine eigene App zu erstellen. Anfordern für die ErklärungErkennen eines eingehenden Anrufs

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) { 
      } 
     } 
    } 

Antwort

0
+0

Haben Sie meinen Code überprüft? Ich möchte Änderungen in meinem Code .. Kannst du verfolgen, was der Fehler in meinem Code, dass es nicht blinkt auf Anrufe –

+0

gut, ich schlage vor, Sie debuggen die gleiche versuchen, Toast hinzufügen, wenn der Status 1 ist und prüfen, ob das bei eingehenden Anruf angezeigt wird Sobald Sie sehen, dass Sie eine Ahnung bekommen können, wo Sie falsch liegen könnten Happy Coding –

+0

ja lassen Sie mich versuchen, aber wenn eine Lösung zu Ihnen kommt bitte versuchen Sie diese –

0

einen Rundfunkempfänger Stellen über eingehenden Anruf wissen

, dass Code schreiben in AndroidManifes.xml

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

und machen Sie eine neue Klasse wie diese.

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

und auch die Erlaubnis von Read.phone state in androidManifest.xml –

+0

Kann nicht gleich (String) auf dem primitiven Typ Int –

+0

aufrufen sorry dafür, schreibe ich diesen Code ohne IDE. –

Verwandte Themen