2015-07-13 5 views
0

Я использую «Широковещательный приемник» в первый раз. Моя основная тема - читать уведомления из строки состояния и отображать ее в списке.java.lang.RuntimeException: Ошибка получения трансляции Намерение

Но когда я звоню Широковещательный приемник Я получаю следующее исключение, и приложение закрывается с крахом в результате.

07-13 14:19:49.081: E/AndroidRuntime(3985): FATAL EXCEPTION: main 
07-13 14:19:49.081: E/AndroidRuntime(3985): Process: com.kc.mobile.notifications, PID: 3985 
07-13 14:19:49.081: E/AndroidRuntime(3985): java.lang.RuntimeException: Error receiving broadcast Intent { act=NOTIFICATION_LISTENER flg=0x10 (has extras) } in c[email protected]41e9ef18 
07-13 14:19:49.081: E/AndroidRuntime(3985):  at android.app.LoadedApk$ReceiverDispatcher$Args.run(LoadedApk.java:769) 

и исходный код, как показано ниже ::

InformationList.java

package com.kc.mobile.notifications; 

import java.util.ArrayList; 

import android.app.Activity; 
import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.content.IntentFilter; 
import android.graphics.Bitmap; 
import android.graphics.BitmapFactory; 
import android.os.Bundle; 
import android.widget.ListView; 

import com.kc.mobile.notifications.adapter.NotificationAdapter; 
import com.kc.mobile.notifications.util.NotificationModel; 

public class InformationList extends Activity 
{ 
    Context mContext; 

    private NotificationReceiver nReceiver; 
    public static NotificationModel mNotification; 
    private ArrayList<NotificationModel> mNotifications = new ArrayList<NotificationModel>(); 
    ListView mList; 
    private NotificationAdapter mAdapter; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) 
    { 
     // TODO Auto-generated method stub 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.informationlist); 
     mContext = getApplicationContext(); 

     nReceiver = new NotificationReceiver(); 
     IntentFilter filter = new IntentFilter(); 
     filter.addAction("NOTIFICATION_LISTENER"); 
     registerReceiver(nReceiver, filter); 

     Intent broadcastIntent = new Intent("NOTIFICATION_LISTENER_SERVICEE"); 
     broadcastIntent.putExtra("command", "list"); 
     sendBroadcast(broadcastIntent); 

    } 

    class NotificationReceiver extends BroadcastReceiver 
    { 

     @Override 
     public void onReceive(Context context, Intent intent) 
     { 

      byte[] byteArray = intent.getByteArrayExtra("icon"); 
      Bitmap bmp = null; 
      if (byteArray != null) 
      { 
       bmp = BitmapFactory.decodeByteArray(byteArray, 0, byteArray.length); 
      } 
      String pack = intent.getStringExtra("package"); 
      String time = intent.getStringExtra("time"); 
      String title = intent.getStringExtra("title"); 
      String desc = intent.getStringExtra("desc"); 
      mNotification.setmBmp(bmp); 
      mNotification.setTitle(title); 
      mNotification.setDesc(desc); 
      mNotification.setmTime(time); 
      mNotification.setPack(pack); 

      if (mNotification != null) 
      { 
       mNotifications.add(mNotification); 
       mAdapter.notifyDataSetChanged(); 
      } 
      else 
      { 
       mNotifications = new ArrayList<NotificationModel>(); 
       mNotifications.add(mNotification); 
       mAdapter = new NotificationAdapter(getApplicationContext(), mNotifications); 
       mList = (ListView) findViewById(R.id.infolist); 
       mAdapter = new NotificationAdapter(mContext, mNotifications); 
       mList.setAdapter(mAdapter); 

      } 
     } 
    } 
} 
+0

это push-уведомление? отправьте URL-адрес, а затем используйте url для загрузки изображения. – Raghunandan

+0

Не нажимайте уведомление. Уведомление о статусной строке (все уведомления, такие как SMS, уведомление о новостях, предупреждение Whatsapp, уведомление FB .....) – KCRaju

+0

вам также необходимо отменить регистрацию в ondestroy активности. Используйте отладчик и пошагово, чтобы посмотреть на причину и исправить – Raghunandan

ответ

0

Проверьте этот синтаксис вы должны зарегистрироваться, а также отменить его ..

public class MyActivity extends Activity { 

     private BroadcastReceiver myBroadcastReceiver = 
      new BroadcastReceiver() { 
       @Override 
       public void onReceive(...) { 
        ... 
       } 
      }); 

     ... 

     public void onResume() { 
      super.onResume(); 
      .... 
      registerReceiver(myBroadcastReceiver, intentFilter); 
     } 

     public void onPause() { 
      super.onPause(); 
      ... 
      unregisterReceiver(myBroadcastReceiver); 
     } 
     ... 
    } 
Смежные вопросы