2015-01-07 33 views
0

只要我的应用程序正在运行,我想阻止传入的SMS消息。我可以做到这一点,但问题是我关闭应用程序后,甚至重新启动甚至卸载它,用户将无法再接收短信。那么,如何才能让应用程序只在运行时以及何时关闭或卸载等情况下阻止传入的短信才能停止阻止短信。这里是我的代码:Android Block使用BroadCastReceiver的传入短信

BroadCastReceiver.Java

package com.example.sms; 
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 
{ 

    public void onReceive(Context context, Intent intent) 
    { 
    abortBroadcast(); 
    } 
    } 

MainActivity.java

package com.example.sms; 

import android.app.Activity; 
import android.content.Intent; 
import android.os.Bundle; 
import android.view.Menu; 
import android.view.MenuItem; 

public class MainActivity extends Activity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
    } 
} 

Manifiest:

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

    <uses-sdk 
     android:minSdkVersion="8" 
     android:targetSdkVersion="19" /> 
<uses-permission android:name="android.permission.RECEIVE_SMS"/> 

    <application 
     android:allowBackup="true" 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name" 
     android:theme="@style/AppTheme" > 
     <receiver android:name=".BroadCastReceiver"> 
    <intent-filter android:priority="2147483647"> 
     <action android:name="android.provider.Telephony.SMS_RECEIVED" /> 
    </intent-filter> 
</receiver> 

     <activity 
      android:name="com.example.sms.MainActivity" 
      android:label="@string/app_name" > 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
    </application> 

</manifest> 

注:我测试的应用程序上Android 2.2的我android模拟器“使用Telnet发送短信”

+0

从kitkat和以上版本是不可能的... – KomalG

+0

是啊我知道,我在说4.4>版本 – AlphaCode

回答

1

检查,如果你的应用程序正在运行则仅中止广播接收器别无他

//define this variable above onReceive() with default value as false; 
boolean appRunningInBack=false; 

ActivityManager am = (ActivityManager) mContext.getSystemService(Activity.ACTIVITY_SERVICE); 
String packageName = am.getRunningTasks(1).get(0).topActivity.getPackageName(); 

if(packageName.equalIgnoreCase("your app package name") || appRunningInBack) 
{  
    appRunningInBack=true; 
    abortBroadCast(); 
} else { 

} 

而且在添加权限的AndroidManifest.xml

<uses-permission android:name="android.permission.GET_TASKS" /> 

在此之后,当你的应用程序中去,而background.or运行。这个变量将是真实的。

+0

其实我用包含自equallIgnoreCase给了我一个错误。我也用上下文替换了mContext,因为它说mContext是未识别的或类似的东西。 – AlphaCode

+0

但请注意,应添加一个权限,即:<使用权限android:name =“android.permission.GET_TASKS”/> – AlphaCode

+1

亚..我忘了提及that..glad它为你工作..我会编辑我的答案..谢谢! – Meenal