35

我有个问题。有时我的服务会被这个 logcat 强行关闭:

03-26 20:44:44.849: E/AndroidRuntime(12080): FATAL EXCEPTION: main
03-26 20:44:44.849: E/AndroidRuntime(12080): android.app.RemoteServiceException: Bad notification posted from package by.flipdev.vkspy: Couldn't expand RemoteViews for: StatusBarNotification(pkg=by.flipdev.vkspy id=1 tag=null score=0 notn=Notification(pri=0 contentView=by.flipdev.vkspy/0x1090071 vibrate=null sound=null defaults=0x0 flags=0x2 kind=[null]))
03-26 20:44:44.849: E/AndroidRuntime(12080):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1374)
03-26 20:44:44.849: E/AndroidRuntime(12080):    at android.os.Handler.dispatchMessage(Handler.java:99)
03-26 20:44:44.849: E/AndroidRuntime(12080):    at android.os.Looper.loop(Looper.java:137)
03-26 20:44:44.849: E/AndroidRuntime(12080):    at android.app.ActivityThread.main(ActivityThread.java:4931)
03-26 20:44:44.849: E/AndroidRuntime(12080):    at java.lang.reflect.Method.invokeNative(Native Method)
03-26 20:44:44.849: E/AndroidRuntime(12080):    at java.lang.reflect.Method.invoke(Method.java:511)
03-26 20:44:44.849: E/AndroidRuntime(12080):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:791)
03-26 20:44:44.849: E/AndroidRuntime(12080):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:558)
03-26 20:44:44.849: E/AndroidRuntime(12080):    at dalvik.system.NativeStart.main(Native Method)

这是我添加添加通知的代码:

protected void addNotification(final Bitmap Avatar,
        final int small_Image_ID, final int notify_id, final String text,
        final String title, final Boolean ongoing, final Boolean ticker,
        final String tickerText, final Boolean autoCancel,
        final String notificationCategory, final int notificationValue) {

    try {

        final Intent notificationIntent = new Intent(
                getApplicationContext(), CheckerActivity.class);

        notificationIntent
                .putExtra(notificationCategory, notificationValue);
        notificationIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP
                | Intent.FLAG_ACTIVITY_SINGLE_TOP);

        final PendingIntent contentIntent = PendingIntent.getActivity(
                getApplicationContext(), notify_id, notificationIntent,
                PendingIntent.FLAG_UPDATE_CURRENT);

        final NotificationManager nm = (NotificationManager) context
                .getSystemService(Context.NOTIFICATION_SERVICE);


        final NotificationCompat.Builder builder = new NotificationCompat.Builder(
                context);
        if (Ticker) {
            builder.setContentIntent(contentIntent)
                    .setSmallIcon(small_Image_ID)
                    .setOngoing(ongoing)                    
                    .setLargeIcon(Avatar).setTicker(tickerText)                     
                    .setWhen(System.currentTimeMillis())
                    .setAutoCancel(AutoCancel).setContentTitle(title)
                    .setContentText(text); // Текст уведомления
        } else {
            builder.setContentIntent(contentIntent)
                    .setSmallIcon(small_Image_ID)
                    .setLargeIcon(avatar)                       
                    .setOngoing(ongoing)
                    .setWhen(System.currentTimeMillis())
                    .setAutoCancel(AutoCancel).setContentTitle(title) 
                    .setContentText(text); // Текст уведомления
        }

        final Notification n = builder.getNotification();

        nm.notify(notify_id, n);

    } catch (final Exception e) {
                    // TODO: add exception handling code
    }
}

为什么我的服务被杀死了?

4

4 回答 4

6

当我设置大图标时, 我注意到在3.0模拟器上发生了这种情况。

因此,由于大图标仅由4.0+设备使用,我通过检查构建版本是否 > 13 来解决此问题。如果是(且仅当如此),我设置大图标。

问题已经过去了。

于 2014-02-04T15:11:11.820 回答
5

此问题是缺少资源或资源为空的结果。查看您的代码,我推断,可能的错误似乎在 Ticker (always false)setLargeIcon(avatar)(avatar always is null)上。

你能发布你所有的服务实现吗?

PS请尽量尊重java的命名约定;Ticker、Avatar、AutoCancel 和其他对象应以小写开头。

于 2013-11-25T14:36:44.390 回答
2

好吧,就我而言,我遇到了完全相同的错误,因为我在自定义通知布局中引用了 TextView 的样式定义,其中包含 onClick 目标方法的条目。具体来说:

<item name="android:onClick">onClick</item>

一旦我删除了那条线,问题就消失了。我的疏忽,但很好地提醒不要盲目重用样式。

于 2015-04-06T00:04:48.770 回答
0

除了谷歌推荐的布局和小部件 https://developer.android.com/reference/android/widget/RemoteViews

检查您layout.xml的文件,如果您使用android:tint属性将其删除。因为RemoteViews不接受 layout.xml 与android:tint

于 2020-05-05T12:16:58.333 回答