2014-05-13 5 views
0

J'essaie d'activer et de désactiver l'écran via SMS. voici mon code ci-dessous je ne sais pas ce qui a mal tourné car il ne fonctionne pas du tout. Aidez-moi à trouver l'erreur. Je joins également le fichier manifeste. Merci d'avance. Mon fichier java:Écran activé et désactivé via sms reçus

public class MyReceiver extends BroadcastReceiver{ 

String sender; 
@Override 
public void onReceive(Context context, Intent intent) { 

    SmsMessage[] sms = null; 

    Bundle b = intent.getExtras(); 

    String str = " SMS From : "; 
    if (b != null) { 

     Object[] pdus = (Object[]) b.get("pdus"); 

     sms = new SmsMessage[pdus.length]; 

     for (int i = 0; i < sms.length; i++) { 

      sms[i] = SmsMessage.createFromPdu((byte[]) pdus[i]); 

      if (i == 0) { 
       str += sms[i].getOriginatingAddress(); 
       str += ":"+sms[i].getMessageBody().toString();   

       }else if (sms[i].getMessageBody().equals("D")) { 
        Intent in2= new Intent(Intent.ACTION_SCREEN_OFF); 
        in2.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
        context.startActivity(in2); 

       }else if (sms[i].getMessageBody().equals("E")) { 
        Intent in3= new Intent(Intent.ACTION_SCREEN_ON); 
        in3.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
        context.startActivity(in3); 

      } 
     } 
    } 
     Toast.makeText(context, str, Toast.LENGTH_SHORT).show(); 
     Log.d("Receiving", str); 
    } 

} 
} 

MON fichier manifeste:

<uses-permission android:name="android.permission.RECEIVE_SMS"/> 

    <receiver android:name=".MyReceiver"> 
     <intent-filter android:priority="100"> 
      <action android:name="android.provider.Telephony.SMS_RECEIVED"/> 
      <action android:name="android.intent.action.SCREEN_OFF"/> 
      <action android:name="android.intent.action.SCREEN_ON"/> 
      </intent-filter> 

      </receiver> 
</application> 

+0

Ainsi, ne reçoit-il pas le SMS ou n'allume-t-il pas l'écran? – cYrixmorten

+0

il ne s'allume pas/éteint à la réception, mais après quelques essais, il a même cessé de recevoir des SMS, comme il devrait montrer le toast lors de la réception de SMS. – Disguise

+0

Vous faites beaucoup trop de travail à l'intérieur de votre récepteur. Tout ce que vous devez faire est de recevoir l'intention et de transmettre le contrôle à une activité ou un service pour faire le travail. –

Répondre

0

Ok, d'abord, en ce qui concerne la réception de SMS que vous pouvez voir ma réponse à cette question: communication between two device using sms

C'est le moyen le plus fiable de recevoir des SMS que j'ai trouvé.

Notez que SMS pourrait ne pas être la meilleure option sur les nouveaux appareils de KitKat vers le haut si vous ne voulez pas le message apparaisse sur l'appareil Hide sms notifications with a broadcastreceiver in KitKat

Vous voudrez peut-être envisager de passer à pousser les notifications de l'Internet à la place. Ceci est facilement fait en utilisant par exemple parse.com

En ce qui concerne l'activation et la désactivation de l'écran, j'utilise le code suivant. Remarquez qu'il a besoin d'accéder à une activité, donc cela ne fonctionnera pas à moins que votre activité ne soit en vie. Ce que je suggère de faire est:

  1. Recevoir le Activer/désactiver un message
  2. Envoyer une nouvelle émission par exemple sendBroadcast(new Intent("INTENT_TURN_SCREEN_ON_OFF"))
  3. enregistrer un écouteur pour la diffusion dans votre activité

    // in onCreate 
    wakeScreenReceiver = new WakeScreenReceiver(); 
    registerReceiver(wakeScreenReceiver, new IntentFilter("INTENT_TURN_SCREEN_ON_OFF")); 
    
    // in onDestroy 
    unregisterReceiver(wakeScreenReceiver); 
    
    // WakeScreenReceiver defined somewhere inside the Acitivity 
    public class WakeScreenReceiver extends BroadcastReceiver { 
        private static final String TAG = "WakeScreenReceiver"; 
    
        public RefreshModules() { 
        } 
    
        @Override 
        public void onReceive(Context context, final Intent intent) { 
          screenWakeup(MainActivity.this, MainActivity.this); 
          // or 
          screenRelease(MainActivity.this); 
        } 
    } 
    

De cette façon, l'application ne jamais tenter d'allumer/éteindre l'écran si l'activité est en vie sinon l'émission sera tout simplement ne pas être reçu.

+0

C'est bon. Mais c'est très compliqué pour moi de comprendre en tant qu'apprenant de base. Merci, je vais essayer de comprendre cela. @cYrixmorten – Disguise

Questions connexes