2014-05-13 3 views
0

SMS를 통해 화면을 켜고 끕니다. 여기에 내 코드는 내가 잘못 찾았는지 모르겠다. 전혀 작동하지 않아서 오류를 찾는데 도움이된다. 매니페스트 파일도 첨부하고 있습니다. 미리 감사드립니다. 내 자바 파일 :SMS를 통해 화면을 켜고 끕니다.

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

} 
} 

MY 매니페스트 파일 :

<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

SMS를 수신하지 않거나 화면을 켜거나 끄지 않습니다? – cYrixmorten

+0

수신시 화면을 켜고 끄지 않지만 몇 번 시도한 후에 SMS 수신을 멈추더라도 SMS 수신에 축배를 보여 주어야합니다. – Disguise

+0

수신기 내부에서 너무 많은 작업을하고 있습니다. 당신이해야 할 일은 의도를 받아들이고 작업을 수행 할 활동이나 서비스에 제어권을 넘기는 것입니다. –

답변

0

좋아, 첫째, 당신이 내 대답을 참조 할 수 있습니다 SMS의 수신에 대하여 : communication between two device using sms

내가 찾은 SMS를 수신하는 가장 신뢰할 수있는 방법입니다. SMS는 메시지가 대신 인터넷에서 푸시 알림을 전환하는 것을 고려할 수 있습니다 장치 Hide sms notifications with a broadcastreceiver in KitKat

에 표시하지 않으려는 위쪽 경우 킷캣에서 새로운 장치에서 최선의 선택되지 않을 수도

알 수 있습니다. 이것은 예를 들어 쉽게 할 수 있습니다. parse.com

다음과 같은 코드를 사용하여 화면을 켜고 끕니다.

private PowerManager.WakeLock wl; 
private PowerManager pm; 

public void screenWakeup(Context context, Activity activity) { 

    try { 
     pm = (PowerManager) context 
       .getSystemService(Activity.POWER_SERVICE); 
     // if (!pm.isScreenOn()) { 
     if (wl == null) { 
      wl = pm.newWakeLock(PowerManager.ACQUIRE_CAUSES_WAKEUP 
        | PowerManager.SCREEN_BRIGHT_WAKE_LOCK, "Turios"); 
     } 
     if (!wl.isHeld()) { 
      wl.acquire(); 
     } 

     final Window win = activity.getWindow(); 
     win.addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED 
       | WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD); 
     win.addFlags(WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON 
       | WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); 
     // } 

    } catch (Exception ex) { 
     Log.e(TAG, ex.getMessage()); 
    } 

} 

public void screenRelease(Activity activity) { 

    if (releaseWakeLock()) { 
     activity.getWindow().clearFlags(
       WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD 
         | WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED 
         | WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON 
         | WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); 
    } 

} 

활동에 대한 액세스가 필요하므로 활동이 살아 있지 않으면 작동하지 않습니다. 내가 무엇을 제안하는 것입니다 :

  1. 는 예를 들어, 새로운 방송을 보내기/오프 메시지
  2. 을 켜기 수신 활동이 살아있는 경우 sendBroadcast(new Intent("INTENT_TURN_SCREEN_ON_OFF"))
  3. 활동 내부의 응용 프로그램은 오직/오프 화면을 켜을 시도합니다

    // 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); 
        } 
    } 
    

이 방법을 브로드 캐스트 청취자를 등록, 그렇지 않은 방송은 단순히 것입니다 받지 못한다.

+0

좋습니다. 그러나 기초 학습자로서 이해하는 것은 매우 복잡합니다. 고마워, 나는 이것을 이해하려고 노력할 것이다. @cYrixmorten – Disguise

관련 문제