2016-08-17 4 views
1

これはブロードキャスト受信者です。このコードはkitkatとjeallyBeanで動作しています。この中で、着信メッセージの通知を簡単に受け取ります。モバイルにメッセージが来たときに通知を表示します。マニフェストにタスクマネージャーからアプリケーション終了後、ラジオ受信機がロリポップで動作していません

public class IncomingSms extends BroadcastReceiver { 
    final SmsManager sms = SmsManager.getDefault(); 
    Notification myNotication; 
    NotificationManager nm; 
    public void onReceive(Context context, Intent intent) { 
     nm = (NotificationManager) context 
       .getSystemService(Context.NOTIFICATION_SERVICE); 
     final Bundle bundle = intent.getExtras(); 
     Intent startServiceIntent = new Intent(context, MainActivity.class); 

     try { 

      if (bundle != null) { 

       final Object[] pdusObj = (Object[]) bundle.get("pdus"); 

       for (int i = 0; i < pdusObj.length; i++) { 

        SmsMessage currentMessage = SmsMessage.createFromPdu((byte[]) pdusObj[i]); 
        String phoneNumber = currentMessage.getDisplayOriginatingAddress(); 

        String senderNum = phoneNumber; 
        String compnum=phoneNumber; 
        String message = currentMessage.getDisplayMessageBody(); 

        Log.i("SmsReceiver", "senderNum: "+ senderNum + "; message: " + message); 



        int duration = Toast.LENGTH_LONG; 
        Toast toast = Toast.makeText(context, "senderNum: "+ senderNum + ", message: " + message, duration); 
        toast.show(); 
        if(senderNum.equals(compnum)) 
        { 

         Toast.makeText(context,"Come in the loop",Toast.LENGTH_LONG).show(); 
         Intent intent2 = new Intent(context,MainActivity.class); 

         PendingIntent pendingIntent = PendingIntent.getActivity(context, 1, intent2, 0); 

         Notification.Builder builder = new Notification.Builder(context); 

         builder.setAutoCancel(true); 
         builder.setTicker("this is ticker text"); 
         builder.setContentTitle("WhatsApp Notification"); 
         builder.setContentText("You have a new message"); 
         builder.setSmallIcon(R.drawable.pretty_bullet); 
         builder.setContentIntent(pendingIntent); 
         builder.setOngoing(true); 
         builder.setSubText("This is subtext..."); 
         builder.setNumber(100); 
         builder.build(); 

         myNotication = builder.getNotification(); 
         nm.notify(50, myNotication); 
        } 
       } 
      } 

     } catch (Exception e) { 
      Log.e("SmsReceiver", "Exception smsReceiver" +e); 

     } 
    } 
} 

私は、アプリケーションがタスクマネージャから閉じたときにこれが動作していない

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

    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> 
    <uses-permission android:name="ANDROID.PERMISSION.WRITE_SETTINGS"/> 
    <receiver android:name=".IncomingSms"> 
      <intent-filter 
       android:priority="1"> 
       <action android:name="android.provider.Telephony.SMS_RECEIVED"/> 
      </intent-filter> 
    </receiver> 

を宣言する。しかし、それはjallybean上で動作します。申請が開かれているか閉じられているかを通知したい。

+0

[あなたは、このリンクをチェックすることができます。それは同じ問題を抱えており、あなたに役立つかもしれない答えです。](http://stackoverflow.com/questions/39160320/broadcast-receiver-not-working-when-application-close-from-task-manager-in-lolli) – Tashidev

答えて

0

以下を参照してくださいしてください、

Android Broadcast receiver not executed on application close

私はまた、あなたが優先度を設定する方法についてまで読みたいかもしれないと思います。特定の意図を扱うには相対的な重要性 や能力を指定

AndroidManifestIntentFilter_priority

int型AndroidManifestIntentFilter_priority、以下をお読みください。受信者の場合、 は、 ブロードキャストを受信するために実行される順序を制御します(非同期ブロードキャストの場合、この順序は、 が無視されます)。アクティビティの場合は、 アクティビティがインテントをどの程度処理しているかに関する情報を提供します。複数のアクティビティが のインテントに一致し、異なる優先度を持つ場合、優先度が高いほうの数字が のもののみが一致と見なされます。

ブロードキャストが受信された特定の順序を強制する必要がある場合、または常に他のものより優先されるようにアクティビティを強制的に配置したい場合にのみ使用してください。値は単一の整数で、より良いと考えられる数値は です。

"100"などの整数値である必要があります。

"@ [package:] type:name")またはテーマ属性(形式: "?[package:] [type:] name)の参照でもあります。このタイプの値を含んでいます。

これは、グローバルアトリビュートリソースシンボルの優先度に対応します。

定数値:2(0x00000002)