programing tip

받은 편지함에 도달하기 전에 Android에서 SMS를 삭제할 수 있습니까?

itbloger 2020. 8. 19. 07:48
반응형

받은 편지함에 도달하기 전에 Android에서 SMS를 삭제할 수 있습니까?


받은 편지함에서 SMS를 삭제하고 있지만 알고 싶습니다.받은 편지함에 도달하기 전에 SMS를 어떻게 삭제할 수 있습니까?


예.

이 질문에 대한 부정적인 반응에도 불구하고 SMS 차단에 대한 합법적 인 용도가 있습니다. 예 : 전화 번호 확인 자동화, SMS를 통해 프로비저닝되는 서비스 (일반적으로 데이터 SMS로 수행해야 함) 또는 멋진 Android에 표시하기 위해 특수 형식의 메시지를 처리하여 사용자 경험을 개선하는 애플리케이션 특정 UI.

Android 1.6부터 수신 SMS 메시지 브로드 캐스트 ( android.provider.Telephony.SMS_RECEIVED)는 " 순서 된 브로드 캐스트 " 로 전달됩니다. 즉, 브로드 캐스트를 먼저 수신해야하는 구성 요소를 시스템에 알릴 수 있습니다.

android:prioritySMS 수신에 속성 을 정의 <intent-filter>하면 기본 SMS 애플리케이션보다 먼저 알림을 받게됩니다.

이 시점 에서 브로드 캐스트를 취소 하여 다른 앱으로 전파되지 않도록 할 수 있습니다 .


업데이트 (2013 년 10 월) : Android 4.4가 출시되면 앱의 SMS 전송에 영향을 미칠 수있는 기능에 영향을 줄 수있는 SMS API가 변경됩니다.
자세한 정보는 Android 개발자 블로그 게시물을 확인하세요.
http://android-developers.blogspot.com/2013/10/getting-your-sms-apps-ready-for-kitkat.html


1 단계 : 사용자 지정 브로드 캐스트 수신기를 만들어 SMS를받습니다. 받은 편지함에서 메시지를 사용할 수 없도록 가장 광범위한 것을 중단하는 논리를 작성하십시오.

public class SMSReceiver extends BroadcastReceiver
{
    public void onReceive(Context context, Intent intent)
    {
     if(conditionMatches){
     abortBroadcast();
     }
    }
}

Step-2 AndoridManifest에 broadcast receiver를 등록하고 android : priority 값을 큰 수로 입력합니다.

<receiver android:name=".SMSReceiver" >
            <intent-filter android:priority="1000">
                <action android:name="android.provider.Telephony.SMS_RECEIVED" />
            </intent-filter>
        </receiver>

그게 다야

위 코드는 어떻게 작동합니까?

브로드 캐스트를 수신하는 SMS는 순서가 지정된 브로드 캐스트이므로 우선 순위가 높은 수신자가 먼저 수신하므로 애플리케이션이 먼저 수신하고 수신 한 후에는 방송을 중단합니다. 따라서 다른 응용 프로그램에서받을 수 없습니다. 따라서 SMS는받은 편지함에 존재하지 않습니다.


below ( "android : priority"및 abortBroadcast ()) 솔루션은 Android 메시징 애플리케이션이 기본값 (내가 재고 Android 메시징 애플리케이션을 의미 함) 인 한 작동합니다. 사용자가 "GoSMSPro"또는 "HandcentSMS"를 설치하면 이러한 응용 프로그램은 여전히받은 편지함에 메시지를 표시합니다. "android : priority"때문이라고 생각합니다. 휴대폰에 타사 메시징 응용 프로그램이 설치된 경우 위의 문제를 해결하는 더 좋은 방법이 없습니다.


/**
 * Check priority
 * @param activity
 */
public static void receiverPriority(Activity activity){

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

우선 순위를 확인하고 다른 수신자보다 높은 우선 순위 (매니페스트에서)를 설정하세요.


이와 같은 시나리오가 있고이 연락처 번호 "+ 44xxxxx"등과 관련된 메시지를 삭제하거나 무시하려면 SMS 브로드 캐스트 수신기에서이 코드를 사용하십시오.

 if(sender.equalsIgnoreCase("+44xxxxxx")
   this.abortBroadCast();

또한 높은 우선 순위를 설정해야합니다.

참고 URL : https://stackoverflow.com/questions/1741628/can-we-delete-an-sms-in-android-before-it-reaches-the-inbox

반응형