2011-02-09 7 views
3

코드를 통해 수신/발신 SMS 메시지를 차단하는 확실한 방법을 아는 사람이 있습니까? 실제 SMS 메시지가 수신되고 있으면 정상이지만 수신중인 SMS의 모든 알림을 차단하고 싶습니다. 또한 사용자는 SMS 메시지를 보내거나 (심지어는 심지어는 입력 할 수도) 허용해서는 안됩니다. 그게 가능하니?안드로이드에서 수신/발신 SMS 차단하기

감사합니다.

+0

다시 확인하십시오. 이것은 나를 미치게합니다. BroadcastReceiver를 통해 들어오는 SMS 알림을 차단하는 과정을 만들었지 만 나가는 SMS를 차단하면 나를 미치게 만듭니다 ... 이상적으로는 사용자가 메시징 앱을 열지 못하게하는 것이 좋습니다. 외부 프로세스 (즉, 메시징 앱)를 삭제할 수 있나요? 내가 restartPackage를 통해 그것을 시도했지만, 그 예기치 않게 내 애플 리케이션을 종료합니다. 권한/보안 문제로 인한 것이라고 생각하십니까? 아, 그리고 내가 왜 이것을해야하는지 궁금해하는 사람들을 위해, Textecution (www.textecution.com)과 비슷한 앱을 만들어야하기 때문입니다. 감사! –

답변

2

들어오는 문자의 차단과 관련하여. 브로드 캐스트 리시버를 높은 우선 순위로 등록하면 시스템 앱이 호출되기 전에 코드가 호출됩니다. 방송 수신기보다 방송을 중단 할 수 있으며 다른 응용 프로그램에서는 방송을 볼 수 없습니다. 매니페스트

레지스터 수신기

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

다음 방송 수신기 :

@Override 
public void onReceive(Context context, Intent intent) { 
    abortBroadcast(); 
} 
+0

그 일을 했습니까? 나에게 적합하지 않다. ( –

+3

@Vishnu Mohan G : 가장 높은 우선 순위는 1000이고 우선 순위가 1000 인 수신기를 등록한다. 그런 다음 onReceive 메소드에서 this.abortBroadcast()가 방송을 중단한다. – blackfyre

+0

Android Document say "값은 정수 여야하며, "100"과 같이 더 높은 숫자가 더 높은 우선 순위를 가지며 기본값은 0입니다. 값은 -1000보다 크고 1000보다 작아야하므로 문당 999 여야합니다 http://developer.android .com/guide/topics/manifest/intent-filter-element.html –

3

당신이 보내는 문자 메시지를 차단할 수 없습니다.

다음은 들어오는 텍스트 차단에 사용됩니다.


SmsReceiver.java

import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.os.Bundle; 
import android.telephony.SmsMessage; 
import android.widget.Toast; 

public class BroadCastReceiver extends BroadcastReceiver 
{ 
/** Called when the activity is first created. */ 
private static final String ACTION = "android.provider.Telephony.SEND_SMS"; 
public static int MSG_TPE=0; 
public void onReceive(Context context, Intent intent) 
{ 
    String MSG_TYPE=intent.getAction(); 
     if(MSG_TYPE.equals("android.provider.Telephony.SMS_RECEIVED")) 
    { 
//   Toast toast = Toast.makeText(context,"SMS Received: "+MSG_TYPE , Toast.LENGTH_LONG); 
//   toast.show(); 

    Bundle bundle = intent.getExtras(); 
    Object messages[] = (Object[]) bundle.get("pdus"); 
    SmsMessage smsMessage[] = new SmsMessage[messages.length]; 
    for (int n = 0; n < messages.length; n++) 
    { 
     smsMessage[n] = SmsMessage.createFromPdu((byte[]) messages[n]); 
    } 

    // show first message 
    Toast toast = Toast.makeText(context,"BLOCKED Received SMS: " + smsMessage[0].getMessageBody(), Toast.LENGTH_LONG); 
    toast.show(); 
     abortBroadcast(); 
     for(int i=0;i<8;i++) 
     { 
      System.out.println("Blocking SMS **********************"); 
     } 

    } 
    else if(MSG_TYPE.equals("android.provider.Telephony.SEND_SMS")) 
    { 
     Toast toast = Toast.makeText(context,"SMS SENT: "+MSG_TYPE , Toast.LENGTH_LONG); 
     toast.show(); 
     abortBroadcast(); 
     for(int i=0;i<8;i++) 
     { 
      System.out.println("Blocking SMS **********************"); 
     } 

    } 
    else 
    { 

     Toast toast = Toast.makeText(context,"SIN ELSE: "+MSG_TYPE , Toast.LENGTH_LONG); 
     toast.show(); 
     abortBroadcast(); 
     for(int i=0;i<8;i++) 
     { 
      System.out.println("Blocking SMS **********************"); 
     } 

    } 

} 

} 

의 AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
package="APP.PACKAGE.NAMEHERE" 
android:versionCode="1" 
android:versionName="1.0" > 

<uses-sdk android:minSdkVersion="10" /> 

<supports-screens 
android:largeScreens="true" 
android:normalScreens="true" 
android:smallScreens="true" 
android:resizeable="true" 
android:anyDensity="true" /> 

<uses-feature android:name="android.hardware.telephony" /> 
<uses-permission android:name="android.permission.READ_SMS" /> 
<uses-permission android:name="android.permission.WRITE_SMS" /> 
<uses-permission android:name="android.permission.SEND_SMS" /> 
<uses-permission android:name="android.permission.RECEIVE_SMS" /> 
<uses-permission android:name="android.permission.RECEIVE_MMS" /> 

<application 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" > 
    <activity 
     android:name=".APPACTIVITYHERE" 
     android:label="@string/app_name" 
     android:configChanges="orientation|keyboardHidden" > 


    <service android:name=".MyService" android:enabled="true"/> 
    <receiver android:name="SmsReceiver"> 
     <intent-filter android:priority="2147483647"> 
     <action android:name="android.provider.Telephony.SMS_SENT"/> 
     </intent-filter> 
    </receiver> 

    <service android:name=".MyServiceSentReceived" android:enabled="true"/> 
     <receiver android:name="SmsReceiver"> 
     <intent-filter android:priority="2147483645"> 
     <action android:name="android.provider.Telephony.SMS_RECEIVED"/> 
     </intent-filter> 
     </receiver> 

</application> 

매니페스트에서 멀리 취할 중요한 것은 서비스 블록, 수신기 블록은 , 그리고 권한.

관련 문제