>

먼저 이미 가능한 해결책을 찾고 모든 것을 시도했지만 여전히 작동하지 않았습니다. 뭔가 빠졌어야합니다.

SMS를 받거나 읽고 쓰는 앱을 만들려고합니다. 쓰기 부분이 제대로 작동하고 브로드 캐스트 리시버가 브로드 캐스트를 포착하지 못합니다.

AndroidManifest.xml
   <uses-permission android:name="android.permission.RECEIVE_SMS" />
    <uses-permission android:name="android.permission.SEND_SMS" />
    <uses-permission android:name="android.permission.WRITE_SMS" /> 
    <uses-permission android:name="android.permission.READ_SMS" /> 
...
        <receiver android:name=".SmsReceiver"
            android:permission="android.permission.BROADCAST_SMS">
        <intent-filter>
            <action android:name="android.provider.Telephony.SMS_RECEIVED" />
        </intent-filter>
        </receiver>

SmsReceiver.java
public class SmsReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
    Toast.makeText(context, "ON RECEIVE BROADCAST", Toast.LENGTH_LONG).show();
    Log.d("ON ","RECEIVE");
     Bundle bundle = intent.getExtras();
        Object[] messages = (Object[]) bundle.get("pdus");
        SmsMessage[] sms = new SmsMessage[messages.length];
        // Create messages for each incoming PDU
        for (int n = 0; n < messages.length; n++) {
            sms[n] = SmsMessage.createFromPdu((byte[]) messages[n]);
        }
        for (SmsMessage msg : sms) {
            Log.e("RECEIVED MSG",":"+msg.getMessageBody());
            // Verify if the message came from our known sender
        }
}

로그 나 토스트 중 하나가 발사되지 않았습니다.

매니페스트에 대한 조치를 android.intent.action.AIRPLANE_MODE 로 변경하려고했습니다.  선언을 테스트하고 브로드 캐스트가 수신 된 것은 SMS에서 작동하지 않습니다.

업데이트

다른 전화로 시도했지만 작동했습니다. Handcent SMS를 사용하고 있기 때문에 브로드 캐스트를 차단하는 방법이 있어야합니다. 어느 쪽이든 설치 한 응용 프로그램에 관계없이 모든 전화기에서 작동해야합니다.


  • 답변 # 1

    수신기를 다음과 같이 선언 해보십시오 :

    <receiver android:name=".SmsReceiver" android:permission="android.permission.BROADCAST_SMS" android:exported="true">
        <intent-filter android:priority="5822" >
            <action android:name="android.provider.Telephony.SMS_RECEIVED" />
        </intent-filter>
     </receiver>
    
    

    이것은 저에게 잘 작동합니다.이 receiver is exported 에게 알려주는 플래그 만 추가했습니다. .

    수정 : 인 텐트 필터에 우선 순위를 추가하는 것을 잊었습니다. 우선 순위에 높은 숫자를 사용하십시오.

  • 답변 # 2

    내 의심에 대답하는 주제를 찾았습니다 : 다른 앱에서 BroadcastReceiver Suppress/Block

    우선 순위를 가능한 최대 (999)로 설정 한 경우에도 다른 앱의 우선 순위가 동일한 경우 (이 경우 Handcent SMS 앱) 브로드 캐스트를 수신 할 첫 번째 애플리케이션은 사용자가 처음 설치 한 애플리케이션입니다. .

    내 경우에는 Handcent SMS 였고 수신 할 때 브로드 캐스트가 중단 되었기 때문에 앱에서 아무것도 수신하지 못합니다.

  • 이전 z3py - Z3으로 오버플로 확인
  • 다음 sql - 액티브 레코드 찾기 - 레코드 건너 뛰기 또는 모든 n 번째 레코드 가져 오기