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


100

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


2
j2ee가 정말 여기에 일치하는 태그입니까?
jitter

1
Android에서 Java로 프로그래밍하지 않는 이유는 무엇입니까?
jitter

3
이 악취. 이러면 안됩니다.
MattC

43
합법적 인 용도가 있습니다! 예를 들어 도난당한 경우 SMS를 통해 휴대 전화에서 무언가 (GPS 위치 전송, 초기화 등)를 수행하려는 경우; 전화를 훔친 사람이 SMS 메시지를 보는 것을 원하지 않습니다.
polyglot

21
사람들 어서! 이것은 확실히 "악"이 아닙니다. @polyglot이 맞습니다! Viber처럼 사용자 번호를 확인하기위한 신청을하고 있는데 필요합니다. 모든 것이 "악"으로 사용될 수 있습니다. 사악한 앱을 설치하지 마십시오.
Felipe 2011 년

답변:


187

예.

이 질문에 대한 부정적인 반응에도 불구하고 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


13
어머나 세상에. 사실입니다! 나는 항상 그것이 반대 일 것이라고 생각했습니다! 증거를 보려면 여기를보십시오 . 와. 내가 당신에게 하나 이상의
찬성표를

1
@kakopappa : 예, 답변에서 언급했듯이 Android 1.6 이상에서 작동합니다.
Christopher Orr

1
@herom 우선 순위를 사용하는 앱이 1000있으므로 가능합니다. 실제로 Handcent는 priority를 ​​사용하고 2147483647있습니다.
Christopher Orr 2012

2
이것은 나를 위해 일했습니다 :) 내 앱이 먼저 메시지를 포착하고 알림이 없지만 SMS가 메시지받은 편지함에 도착하지 않습니다. 받은 적이없는 것처럼 내 앱에서만. 브로드 캐스트 중단을 사용하지만받은 편지함에서 메시지를받는 방법이 있습니까?
pandabear

7
@ChristopherOrr가 업데이트에서 말했듯이 새로운 API 레벨 19를 염두에 두는 것이 중요합니다. 거기에 "Beginning with Android 4.4—any attempt by your app to abort the SMS_RECEIVED_ACTION broadcast will be ignored so all apps interested have the chance to receive it.".
GoRoS 2014 년

11

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는받은 편지함에 존재하지 않습니다.


우리는 내가 잠금 화면을 개발할 수 있도록 방송 수신기, 사용자 프레스 메시지받은 편지함을 가질 수 있습니다 ..
Vamsi 파반 마헤에게

9

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


2
좋은 지적. 그러나 이것은 답변이 아니라 주석이어야합니다. 이동할 수 있습니까? --- 그리고 매우 높은 가치를 부여하면 어떨까요? android : priority = "9999"로? 예를 들면? 시도해 보셨습니까?
Felipe

4
@FelipeMicaroniLalli 실제로 GO SMS PRO 등 ... 우선 순위로 2147483647 사용
rf43

1
@DDoSAttack 2147483647이 최대입니까?
Felipe 2011

3
부호없는 가장 큰 정수입니다. en.wikipedia.org/wiki/Integer_(computer_science) Android가 지원하는 최대 값은 999입니다. developer.android.com/reference/android/content/…
rf43

2
@NomanHamid 맞습니다. 999는 최대 우선 순위입니다. 원하는 번호를 사용할 수 있지만 Android는 최대 999 개만 보장합니다. 그보다 큰 것은 불안정하거나 의도하지 않은 결과를 초래할 수 있습니다. 개인적으로 GO SMS PRO와 같은 앱을 살펴보기 위해 2147483647을 사용해야했습니다. 때로는 사용자에게 효과가 있었고 때로는 그렇지 않았습니다.
rf43

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

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


0

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

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

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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.