我正在开发一个应用程序,希望能够阻止传入的文本消息(取决于用户设置),但我无法检测传入的消息.
你介意看我的代码,让我知道我做错了什么吗?
我正在查看与此类似的其他问题,但我找不到任何详细的答案或足够的信息供我参考.
- 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();
- }
- }
- }
- }
这是我的清单
- <receiver android:name=".listener.SmsReceiver">
- <intent-filter android:priority="100">
- <action android:name="android.provider.Telephony.SMS_RECEIVED" />
- </intent-filter>
- </receiver>
我一直在关注MobiForge(http://mobiforge.com/developing/story/sms-messaging-android)的教程以及这里的问题:
How to block an incoming message in android?
Android – Listen For Incoming SMS Messages
任何人都能指出我在正确的方向吗?
我会很感激.
解决方法
这是我用来阻止传入文本的内容.
这就是我回答我的问题的方法.
这就是我回答我的问题的方法.
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>
从清单中拿走的主要内容是服务块,接收器块和权限.