2012-06-25 21 views
6

Tôi đang làm việc trên một ứng dụng hy vọng sẽ có khả năng chặn tin nhắn văn bản đến (tùy thuộc vào cài đặt người dùng), nhưng tôi gặp sự cố khi phát hiện thư đến.Chặn văn bản đến (Android)

Bạn có muốn xem mã của tôi và cho tôi biết tôi đang làm gì không? Tôi đã xem qua các câu hỏi khác tương tự như câu hỏi này nhưng tôi không thể tìm thấy bất kỳ câu hỏi nào có câu trả lời chi tiết hoặc đủ thông tin để tôi tham khảo.

import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.os.Bundle; 

    public class SmsReceiver extends BroadcastReceiver{ 

    public void onReceive(Context context, Intent intent) { 
     if(intent.getAction().equals("android.provider.Telephony.SMS_RECEIVED")){ 
      Bundle bundle = intent.getExtras(); 
      if (bundle != null){ 
       abortBroadcast(); 
      } 
     } 
    } 

    } 

Dưới đây là tôi manifest

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

Tôi đã làm theo các hướng dẫn về MobiForge (http://mobiforge.com/developing/story/sms-messaging-android) cũng như các câu hỏi ở đây:

How to block an incoming message in android?

Android – Listen For Incoming SMS Messages

Bất cứ ai có thể điểm tôi đi đúng hướng ở đây? Tôi sẽ đánh giá cao nó.

+0

bản sao có thể có của [Cách chặn thư đến trong android?] (Http://stackoverflow.com/questions/9378431/how-to-block-an-incoming-message-in-android) – t0mm13b

+0

Tôi đã trải qua câu trả lời của câu hỏi đó và không tìm thấy gì hữu ích. – localhost

+0

Tôi đã thử các biến thể trong trình thu thập tệp kê khai của tôi chẳng hạn như ".SmsReceiver" và ".listener.SmsReceiver". Tên tệp của tôi là "SmsReceiver.java" – localhost

Trả lời

10

Đây là những gì tôi sử dụng để chặn văn bản đến. Đây là cách tôi trả lời câu hỏi của mình.


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> 

Điều quan trọng để lấy đi từ manifest là khối dịch vụ, khối thu và các quyền.

+0

@PeterMerrill .. cảm ơn vì đã chia sẻ điều này !! – swiftBoy

+0

Không thành vấn đề! Tôi hy vọng nó sẽ giúp bất cứ ai cần nó. – localhost

+1

Hi Peter, nhận được một phần mã của bạn đang hoạt động nhưng gửi sms không hoạt động, tôi có nghĩa là nó được gửi đến đầu nhận trong khi tôi muốn chặn tin nhắn đó khi dịch vụ đang chạy. Bạn có thể vui lòng chỉ ra những gì đang xảy ra không? –