2013-05-15 3 views
1

Я новичок в android, я пытаюсь сделать приложение, используя широковещательный приемник, который отправляет сообщение в панель уведомлений, когда на устройство меняются обои. Он успешно установлен на устройстве, но не работает должным образом. Вот кодBroadcast Receiver

WallPagerNotificationReceiver.java

import android.app.Notification; 
import android.app.NotificationManager; 
import android.app.PendingIntent; 
import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.net.Uri; 

import android.util.Log; 
import android.widget.Toast; 

public class WallPaperNotificationReceiver extends BroadcastReceiver { 

       @Override 
       public void onReceive(Context context, Intent intent) { 
           this.sendNotification(context, "You have changed Wallpaper"); 
    } 
    private void sendNotification(Context ctx, String message) 
    { 
       //Get the notification manager 
       String ns = Context.NOTIFICATION_SERVICE; 
       NotificationManager nm = 
           (NotificationManager)ctx.getSystemService(ns); 

       //Create Notification Object 
           int icon = R.drawable.ic_launcher; 
           CharSequence tickerText = "Hello"; 
           long when = System.currentTimeMillis(); 

           Notification notification = 
               new Notification(icon, tickerText, when); 

           //Set ContentView using setLatestEvenInfo 
        Intent intent = new Intent(Intent.ACTION_VIEW); 
        intent.setData(Uri.parse("http://www.google.com")); 
        PendingIntent pi = PendingIntent.getActivity(ctx, 0, intent, 0); 
        notification.setLatestEventInfo(ctx, "Intimation", message, pi); 

        //Send notification 
           nm.notify(1, notification); 
           Toast.makeText(ctx,"Hello Nawin",Toast.LENGTH_LONG).show(); 
    } 

} 

Manifest.xlm

<xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="in.ac.srmuniv" 
    android:versionCode="1" 
    android:versionName="1.0" > 

    <uses-sdk android:minSdkVersion="15" /> 

    <application 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name" > 

    <receiver android:name=".WallPaperNotificationReceiver"> 
      <intent-filter> 
      <action android:name="android.intent.action.WALLPAPER_CHANGED" /> 
      </intent-filter> 
    </receiver> 
</application> 
</manifest> 

ли это правильный способ использовать широковещательный приемник? если это поможет мне, где я совершил ошибку?

Спасибо заранее.

P.S: Я не использую ни деятельность, ни обслуживание. В соответствии с процессом жизненного цикла мы можем иметь приоритетный процесс размещения широковещательного приемника http://developer.android.com/guide/components/processes-and-threads.html#Threads

+0

Ваш вопрос не очень ясен. Каково ожидаемое поведение и что вы видите вместо этого? – Kuffs

+0

Мой ожидаемый результат - получить сообщение «Уведомление» при изменении обоев. Моя проблема: теперь я не получаю уведомления, даже меняю обои – Vijay

+0

Я поставил исправление для приемника ниже. Однако я не тестировал ваш код уведомления. Лучше всего использовать тост в методе onReceive, чтобы вы знали, что получили трансляцию. –

ответ

3

Начиная с версии 3.1 Android BroadcastReceivers, зарегистрированной только в манифесте и в приложении, которое не имеет активности, не будет работать. Каждое приложение должно иметь активность, которая должна выполняться хотя бы один раз, чтобы позволить получателю работать. Это предотвращает вредоносное ПО. Вам просто нужна фиктивная активность, которая ничего не делает, а затем завершает работу, и ваш ресивер работает.

1

Изменить приемник на:

<receiver android:name=".WallPaperNotificationReceiver"> 
     <intent-filter> 
     <action android:name="android.intent.action.ACTION_WALLPAPER_CHANGED" /> 
     </intent-filter> 
</receiver> 

Это фактическая передача:

http://developer.android.com/reference/android/content/Intent.html#ACTION_WALLPAPER_CHANGED

+0

Я меняю приемник, как вы уже упоминали, даже не работает – Vijay

+0

См. Сообщение NickT. О том, чего я не знал, хотя у меня никогда не было требования делать такую ​​вещь. Однако вышеупомянутый приемник является правильным. –

0

Положите некоторые протоколирования в вашем коде, чтобы определить, вообще ли вызван широковещательный приемник.

Если это не так, выяснить причину для этого (неправильного манифеста и т.д.)

Если Broadcast Receiver вызывается, то ваш код, который строит уведомление неправильно.

+0

Я проверил с заявлением о регистрации, приемник вещания не запускается :( – Vijay

+0

Если это не срабатывает, это проблема с вашим манифестом. Попробуйте указать полное имя пакета вместо «.WallPaperNotificatiobReceiver». Также убедитесь, что ваш получатель назван точно так же, как то, что вы заявляете в своем манифесте. – Kuffs

Смежные вопросы