2011-11-06 5 views
8

나는 정말 좌절하는 문제에 직면 해있다."android.provider.Telephony.SMS_RECEIVED"가 내 장치에서 작동하지 않습니다 (HTC Wildfire) - 디버깅하는 방법?

나는 대부분의 온라인 및 서적 튜토리얼에서 SMS 수신기를 만들었습니다.

의 AndroidManifest.xml :

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

<application android:name="roboguice.application.RoboApplication" 
      android:icon="@drawable/icon" 
      android:label="@string/app_name" 
      android:debuggable="true" >  

    <!-- ... other stuffs here ... --> 

    <receiver android:name=".receivers.SmsReceiver"> 
     <intent-filter> 
      <action android:name="android.provider.Telephony.SMS_RECEIVED" /> 
     </intent-filter> 
    </receiver> 
</application> 

SmsReceiver.java :

public class SmsReceiver extends BroadcastReceiver { 

    public static final String TAG = "SmsReceiver"; 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     Log.d(TAG, "SMS received!"); 
     Toast.makeText(context, "SMS received.", Toast.LENGTH_LONG).show(); 
    } 
} 

그것이 내 HTC 산불 (안드로이드 2.2에서 작동하지 않습니다 에뮬레이터 (안드로이드 2.2)에서 제대로 작동하지만 .1, 루팅되지 않음).

주요 문제는 내가 Android deveopment를 처음 접했고 완전히 디버깅하는 방법을 모른다는 것입니다.

SMS 메시지를받는 동안 내 HTC 장치에서 LogCat 로그 보내기와 관련된 유용한 정보를 찾을 수 있습니까? 내 장치가 다른 이유는 무엇입니까?

+0

SMS 방송이 주문되었으므로 1 단계는 수신기 우선 순위를 무언가 치켜 올리는 것입니다. 인 텐트 필터의 android : priority 속성을 무의미하게 높은 값으로 설정하고 다시 테스트하여이 작업을 수행 할 수 있습니다. 2147483647과 같은 것을 시도하십시오. – Jens

+0

LogCat에 로그인하지 않음, 토스트가 표시되지 않음, 장치에 아무 것도 없음 (에뮬레이터에서 예상대로 작동 함) 전화가 걸릴 때 LogCat에서 이러한 로그를받는 이유가 궁금합니다. SMS 메시지를 수신합니다 : "11-06 23 : 43 : 20.540 : DEBUG/SMSDispatcher (171) : dispatchWapPushToCIQ >>>"그 이유가 무엇입니까? – ncreated

+0

흠, 기존 SMS 필터 (마켓에서) 또는 Wildfire와 비슷한 것을 다운로드하여 테스트 해보십시오. HTC 휴대 전화에서 이상한 일이 될 수 있습니다. (전에 일어난 일입니다 ...) – Jens

답변

9

이유 & 솔루션 : 그 문제를 해결했습니다

. 장치에 "GO SMS Pro"응용 프로그램이 설치되어 있고 "다른 메시지 알림 사용 안 함"옵션이 선택되어 있기 때문에 "android.provider.Telephony.SMS_RECEIVED"이 작동하지 않았습니다 ("알림 표시 줄에 다른 SMS 관련 응용 프로그램 사용 안 함" 중복 된 알림을 피하십시오. "). 선택을 취소하면 내 문제가 해결되었습니다.

다른 앱이 차단하더라도 내 방송 수신기가이 의도를 수신하도록하려면 어떻게해야하나요? "android : priority"(Intercept SMS messages in Android and prevent them appearing in Messaging App)로 인해 "GO SMS Pro"앱에 "우선 순위"가 무엇인지 알 수 있습니까? 당신의 이유 & 솔루션를 들어

+0

thx 이것은 "사전 설정"-> "기타 설정"-> (선택 취소) "다른 메시지 알림 비활성화"에서 작동합니다. –

0

나는이 코드가 옳다는 것을 확신한다. Toast 메시지가 표시되지 않을 수도 있지만 로그가 표시됩니다. 로그 캣을 확인하면 넣은 로그를 볼 수 있습니다.

Toast이 아닌 BroadcastReceivers 안에 Notifications을 사용해야합니다.

7

:

Intent intent = new Intent("android.provider.Telephony.SMS_RECEIVED"); 
List<ResolveInfo> infos = getPackageManager().queryBroadcastReceivers(intent, 0); 
for (ResolveInfo info : infos) { 
    System.out.println("Receiver name:" + info.activityInfo.name + "; priority=" + info.priority); 
} 

그리고 바로 GO SMS 프로 쓰레기에 대한 출력을 통해 본다. 그것은 아마 엄청나게 높을 것입니다.

+2

감사합니다 milion :)! 이제 "GO SMS Pro"의 사람들이 최대 정수 값 (2147483647)과 동일한 우선 순위를 가진 두 수신기를 만들었습니다. 그들의 애플 리케이션은 아마도 SMS_RECEIVED에 abortBroadcast()를 호출합니다. 그래서 내가 그들의 애플 리케이션과 싸울 수있는 방법이 무엇입니까? 문서에서는 우선 순위가 동일 할 때 어떤 일이 발생하는지에 대해서는 언급하지 않았지만 "Go SMS Pro"앱이 먼저 호출되고 SMS_RECEIVED 의도를 사용하며 내 앱이 결과로 호출되지 않습니다. ( – ncreated

+0

"처음으로 승리했습니다." 내가 올바르게 기억한다면 최선의 방법은 GO SMS Pro가 알려진 문제 (대화, 알림 또는 무엇이 있는지)를 고객에게 경고하는 것입니다. – Jens

+1

다시 한 번 감사드립니다. 아마도 가장 좋은 해결책은 위의 코드를 사용하는 것의 확장 일 것입니다. 최대 우선 순위를 가진 SMS_RECEIVED 의도에 대해 등록 된 다른 수신자가 있는지 확인한 다음 나열된 앱으로 인해 문제가 발생할 수 있음을 경고합니다. – ncreated

2

GO SMS PRO는 우선 순위가 2^31-1 = 2147483647입니다. GO SMS 서비스가 다른 브로드 캐스트를 중단했기 때문에 앱에서 어떤 메시지도 수신 할 수 없습니다.

관련 문제