2016-08-17 112 views
1

這是Broadcastreceiver。這段代碼在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)

相關問題