2017-05-31 20 views
0

SMSアプリケーションを構築中です。one activitybroadcast receiverがあります。問題は、broadcast receiveronReceive()メソッドが呼び出されていないことです。 receiverクラスとmanifestファイルのcodeを以下に示します。SMSブロードキャストレシーバのonReceive()メソッドが呼び出されていない

放送受信

public class SmsBroadcastReceiver extends BroadcastReceiver { 
    public AudioManager audioManager; 
    SharedPreferences sharedPreferences; 
    boolean b=false; 
    String smsBody; 
    final int REQUEST_CODE_ASK_PERMISSIONS = 123; 

    public static final String SMS_BUNDLE = "pdus"; 

    SmsMessage smsMessage; 
    public void onReceive(Context context, Intent intent) { 
     Toast.makeText(context.getApplicationContext(),"Toast Long",Toast.LENGTH_LONG).show(); 


     sharedPreferences = context.getApplicationContext().getSharedPreferences("Pritom", context.MODE_PRIVATE); 
     Bundle intentExtras = intent.getExtras(); 
     String format = intentExtras.getString("format"); 
     if (intentExtras != null) { 
      Object[] sms = (Object[]) intentExtras.get(SMS_BUNDLE); 
      String smsMessageStr = ""; 
      String pass3 = sharedPreferences.getString("password", null); 
      for (int i = 0; i < sms.length; ++i) { 

       if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { 

        smsMessage = SmsMessage.createFromPdu((byte[]) sms[i], format); 
       } else { 
        smsMessage = SmsMessage.createFromPdu((byte[]) sms[i]); 
       } 
       smsBody = smsMessage.getMessageBody().toString(); 
       String address = smsMessage.getOriginatingAddress(); 

       smsMessageStr += "SMS From: " + address + "\n"; 
       smsMessageStr += smsBody + "\n"; 
      } 
      /*if (smsBody.equals("@general" + pass3)) { 
       AudioManager audioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE); 
       audioManager.setRingerMode(audioManager.RINGER_MODE_NORMAL); 
      }*/ 
      Toast.makeText(context, "SMS : " + smsBody + pass3, Toast.LENGTH_SHORT).show(); 
      Log.d("Message:", smsBody + pass3); 

     } 
    } 
} 

ここでの問題は、単にonReceive()以下ToastメッセージがメソッドonReceive()が呼び出されていないことを示す表示されていないことです。

のAndroidManifest.xml私は自分のアプリケーションをテストするためAndroid 5.0.1を使用している

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.mytrendin.inappmessaging"> 
    <uses-permission android:name="android.permission.READ_SMS" /> 
    <uses-permission android:name="android.permission.RECEIVE_SMS" /> 
    <uses-permission android:name="android.permission.READ_PHONE_STATE"/> 
    <application 
     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=".SmsBroadcastReceiver" android:exported="true" > 
      <intent-filter android:priority="999" > 
       <action android:name="android.provider.Telephony.SMS_RECEIVED" /> 
      </intent-filter> 
     </receiver> 
    </application> 

</manifest> 

。 はあなたの助けをありがとう:)

+0

優先アンドロイドを設定してみてください:優先順位=「2147483647」受信機の意図フィルタ – FAT

+0

@DanielNugentに、私が持っていますそれを試みましたが動作しませんでした:( –

+0

このレシーバを呼び出したアクティビティ/フラグメントは? – Ibrahim

答えて

0

受信機intent-filterに高い優先順位android:priority="2147483647"を設定してみてください:

<receiver android:name=".SmsBroadcastReceiver" android:exported="true" > 
    <intent-filter android:priority="2147483647" > 
     <action android:name="android.provider.Telephony.SMS_RECEIVED" /> 
    </intent-filter> 
</receiver> 
+0

私はこれをしましたが、それは動作しませんでした –

+0

'アンドロイド5.0'といくつかの問題があると思います –

+0

私は、あなたがSMSを受信するための実行時許可が必要だと思う。 – FAT

関連する問題