2017-01-13 7 views
0

私は受信トレイからSMSを削除するコードを書きました&特定の番号のSMSをブロックします。しかしそれは完全には機能しません。ここ はここSMSがブロックされていないか、アンドロイドから削除しています

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

    <uses-permission android:name="android.permission.RECEIVE_SMS" /> 
    <uses-permission android:name="android.permission.WRITE_SMS"/> 
    <uses-permission android:name="android.permission.READ_SMS"/> 

    <uses-permission android:name="android.permission.INTERNET" /> 
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
    <uses-permission android:name="android.permission.CALL_PHONE"/> 



    <application 
     android:enabled="true" 
     android:allowBackup="true" 
     android:icon="@mipmap/ic_launcher" 
     android:label="@string/app_name" 
     android:supportsRtl="true" 
     android:theme="@style/AppTheme"> 

     <activity android:name=".MainActivity"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

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

     <receiver android:name="com.example.dotnet.epomoload.BroadCastReceiver"> 
      <intent-filter android:priority="2147483647"> 
       <action android:name="android.provider.Telephony.SMS_RECEIVED" /> 
      </intent-filter> 
     </receiver> 




    </application> 

</manifest> 

コードは、この条件ブロードキャスト機能では、私は優先順位2147483647(最大整数番号)を設定し、マニフェストファイルで作業していません。しかし、私はデータを取得しています。 &コードが動作しない理由がわかりません。

@SuppressWarnings("deprecation") 
public class BroadCastReceiver extends BroadcastReceiver 
{ 
public String blockingNumber = "BulkSMS"; 


private static final String LOG_TAG = "SMSApp"; 
/* package */ 
static final String ACTION = "android.provider.Telephony.SMS_RECEIVED"; 
public void onReceive(Context context, Intent intent){ 
    String strFrom = ""; 
    String strMsg=""; 



    if (intent.getAction().equals(ACTION)){ 
     Bundle bundle = intent.getExtras(); 
     if (bundle != null){ 
      Object[] pdus = (Object[]) bundle.get("pdus"); 
      SmsMessage[] messages = new SmsMessage[pdus.length]; 
      for (int i = 0; i < pdus.length; i++){ 
       messages[i] = SmsMessage.createFromPdu((byte[]) pdus[i]); 
      } 
      for (SmsMessage message : messages){ 
       strFrom = message.getDisplayOriginatingAddress(); 
       strMsg = message.getDisplayMessageBody(); 
      } 
      if (strFrom.equals(blockingNumber)){ 
       this.abortBroadcast(); 
       Toast.makeText(context.getApplicationContext(),"Sms From Shohan"+strMsg,Toast.LENGTH_LONG).show(); 
       //removeMessage(context,blockingNumber); 
       Uri uriSMS = Uri.parse("content://sms/inbox"); 
       Cursor cursor = context.getContentResolver().query(uriSMS, null, 
         null, null, null); 
       cursor.moveToFirst(); 
       if(cursor.getCount() > 0){ 
        int ThreadId = cursor.getInt(1); 
        context.getContentResolver().delete(Uri. 
            parse("content://sms/conversations/"+ThreadId), "address=?", 
          new String[]{blockingNumber}); 
        Log.d("Message Thread Deleted", blockingNumber); 
       } 
       cursor.close(); 
      } 
     } 
    } 

} 


} 
+3

KitKatから、あなたのアプリは、ユーザのデフォルトのメッセージングアプリとして選択されていない限り、メッセージを削除することはできません。 'abortBroadcast()'は 'SMS_RECEIVED'ブロードキャストではまったく動作しません。 –

答えて

0

Android 4.4から、SMSでの書き込み(読み取り、削除のマーク付け)操作はできません。この動作を実現するには、アプリがデフォルトのSMSメッセージングアプリである必要があります。アプリがデフォルトのSMSアプリとして動作するように設計されている場合、あなたのアプリがデフォルトで選択されていない間

しかし、 はその後、それはあなたが 機能などをあなたのアプリ上に置かれた制限を理解し、無効に重要な です適切な。SMSシステムに送信されたSMSメッセージは、デフォルトのSMSアプリではない間にSMSプロバイダに送信されますが、 はMMSメッセージを送信しません。アプリがデフォルトのアプリとして設定されている場合、あなたはTelephony.Sms.getDefaultSmsPackage()をチェックしなければなりません Reference

など、 が読み取りとしてマークし、下書きとしてメッセージをマークし、それらを削除します。

関連する問題