2015-01-07 3 views
0

Я хочу заблокировать входящее SMS-сообщение до тех пор, пока мое приложение запущено. Я мог бы это достичь, но проблема в том, что после закрытия приложения или даже перезагрузки или даже его удаления пользователь больше не сможет получать SMS-сообщение. Итак, как я могу заставить приложение блокировать входящие SMS только тогда, когда оно работает, и когда оно закрывается или удаляется и т. Д., Чтобы остановить блокировку SMS. Вот мой код:Блокировка входящих звонков Android с помощью 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> 

Примечание: Я тестировал приложение на андроид 2.2 на мой Android-эмулятор «Отправленные SMS-сообщения с использованием 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

Но учтите, что должно быть добавлено разрешение: AlphaCode

+1

ya..i забыл упомянуть, что .. glad это сработало для вас .. я буду отредактируйте мой ответ .. спасибо! – Meenal

Смежные вопросы