2

我是 android 新手,我正在尝试使用广播接收器做一个应用程序,当设备上的墙纸发生变化时,它会将消息发送到通知栏。它已成功安装在设备上,但未按预期工作。这是代码

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();
    }

}

清单.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>

这是使用广播接收器的正确方法吗?如果是这样,请帮助我在哪里做错了?

提前致谢。

PS:我没有使用活动或服务。根据进程生命周期,我们可以通过托管广播接收器来拥有前台进程http://developer.android.com/guide/components/processes-and-threads.html#Threads

4

3 回答 3

4

由于仅在清单和没有 Activity 的应用程序中注册的 Android 3.1 版广播接收器将无法工作。每个应用程序必须有一个必须至少运行一次才能使接收器工作的活动。这是为了防止恶意软件。您只需要一个虚拟活动,它什么都不做,然后退出运行一次并让您的接收器工作。

于 2013-05-15T13:45:07.220 回答
2

将接收器更改为:

<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

于 2013-05-15T13:24:52.193 回答
1

在您的代码中添加一些日志语句以确定广播接收器是否被调用。

如果不是,请调查原因(不正确的清单等)

如果正在调用广播接收器,则构建通知的代码是错误的。

于 2013-05-15T13:25:55.027 回答