2016-08-22 2 views
0

포드 그라운드에서 실행중인 서비스가 있습니다.이 서비스에는 브로드 캐스트 수신기가있어 SMS_RECEIVED 동작을 수신합니다.Android-SMS_RECEIVED + 전경 서비스 충돌로 브로드 캐스트

사용자가 응용 프로그램 안에있을 때 (응용 프로그램과 서비스가 모두 포 그라운드에 있음) 모든 것이 잘 작동하고 의도를 수신하고 있습니다.

그러나 사용자가 응용 프로그램을 사용하는 경우 (브로드 캐스트가있는 서비스 만 포 그라운드에 있음) SMS를 받으면 서비스가 중지됩니다.

서비스가 중지되면 아무 곳에서나 오류 보고서를 찾을 수 없습니다 (logcat이 아니고 충돌 대화 상자가 나타나지 않음).

방송에 내 서비스 :

public class myService extends IntentService { 
    private final BroadcastReceiver mReceiver = new BroadcastReceiver() { 
     @Override 
     public void onReceive(Context context, Intent intent) { 
      Toast.makeText(myService.this, intent.getAction(), Toast.LENGTH_SHORT).show(); 
     } 
    }; 

    @Override 
    public void onCreate() { 
     super.onCreate(); 
     IntentFilter i= new IntentFilter("android.provider.Telephony.SMS_RECEIVED"); 
     i.setPriority(999); 
     registerReceiver(mReceiver, receiverFilter); 
     startForeground(...); 
    } 

    public void onDestroy() { 
     super.onDestroy(); 
     stopForeground(true); 
    } 
} 

그리고 나는 또한 내 매니페스트에 다음과 같은 권한이 있습니다

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

는 myService는 매니페스트에 다음과 같이 선언한다 :

<service 
     android:name=".Services.myService" 
     android:enabled="true" 
     android:exported="false" /> 
+0

오류가있는 logcat을 표시 할 수 있습니까? –

+0

안녕하세요 @ MasterDisaster, 거기에 logcat 오류가 표시됩니다. – user12597562891

+0

'전경 서비스 충돌 '이므로 충돌하거나 충돌하지 않습니다. 충돌이 발생하면 logcat에 오류가 발생합니다. –

답변

0

나는 동일한 문제가있어서 <uses-permission android:name="android.permission.RECEIVE_SMS" />을 제거하고 해결했습니다. 그러나이 허가를 제거하면 들어오는 SMS를 감지 할 수 없으므로 Catching Outgoing SMS using ContentObserver과 같은 클래스를 만들고 대신 MESSAGE_TYPE_SENT = 2을 사용했습니다. 이 허가를 <uses-permission android:name="android.permission.READ_SMS" />에 추가해야합니다.

관련 문제