首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ClassNotFoundException RemoteViews

ClassNotFoundException RemoteViews
EN

Stack Overflow用户
提问于 2012-08-04 22:54:45
回答 1查看 1.6K关注 0票数 3

我从TextView创建自己的控件。我尝试在通知时在RemoteViews中使用此控件。但是问题是,如果我尝试显示通知,得到错误:

java.lang.ClassNotFoundException:{命名空间}.{myClass}。

但是如果我在活动布局中添加相同的控件。一切都好。有什么问题吗?

我的TextView:

代码语言:javascript
复制
public class ScrollingTextView extends TextView {

public ScrollingTextView(Context context, AttributeSet attrs, int defStyle) {
    super(context, attrs, defStyle);
}

public ScrollingTextView(Context context, AttributeSet attrs) {
    super(context, attrs);
}

public ScrollingTextView(Context context) {
    super(context);
}

@Override
protected void onFocusChanged(boolean focused, int direction, Rect previouslyFocusedRect) {
    if (focused)
        super.onFocusChanged(focused, direction, previouslyFocusedRect);
}

@Override
public void onWindowFocusChanged(boolean focused) {
    if (focused)
        super.onWindowFocusChanged(focused);
}

@Override
public boolean isFocused() {
    return true;
}

}

我的通知布局:

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8"?>

代码语言:javascript
复制
<ImageView
    android:id="@+id/notification_image"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_centerVertical="true"
    android:layout_marginRight="10dp"
    android:background="@drawable/ic_launcher" />

<TextView
    android:id="@+id/notification_title"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_toRightOf="@+id/notification_image"
    android:text="notification_title"
    android:textStyle="bold" />

<{namespace}.ScrollingTextView
    android:id="@+id/notification_message"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@+id/notification_title"
    android:layout_toRightOf="@+id/notification_image"
    android:ellipsize="marquee"
    android:marqueeRepeatLimit="marquee_forever"
    android:scrollHorizontally="true"
    android:singleLine="true"
    android:text="notification_message" />

通知电话:

代码语言:javascript
复制
Intent intent = new Intent(context, NotificationActivity.class);
PendingIntent pendingIntent = PendingIntent.getActivity(context, 1, intent, PendingIntent.FLAG_UPDATE_CURRENT);
Notification notification = new Notification(R.drawable.ic_launcher, tickerText, System.currentTimeMillis());
notification.setLatestEventInfo(context, contentTitle, contentText, pendingIntent);
RemoteViews contentView = new RemoteViews(_context.getPackageName(), R.layout.notify);
contentView.setImageViewResource(R.id.notification_image, R.drawable.ic_launcher);
contentView.setTextViewText(R.id.notification_title, state.contentTitle);
contentView.setTextViewText(R.id.notification_message, state.contentText);
notification.contentView = contentView;
_notificationManager.notify(1, notification);
  • 更新05.08.2012 17:08

在android清单中,我有值package="com.test“。

在{命名空间}I com.test和{myClass} - ScrollingTextView下。ScrollingTextView放在com.test包上。

发生错误: android.view.InflateException:二进制XML文件行#25:错误充气类com.test.ScrollingTextView。

其中第25行为行,其中声明为ScollingTextView:

代码语言:javascript
复制
<com.test.ScrollingTextView ...

完全错误:

代码语言:javascript
复制
couldn't inflate view for notification com.test/0x1
android.view.InflateException: Binary XML file line #25: Error inflating class com.test.ScrollingTextView
    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:691)
    at android.view.LayoutInflater.rInflate(LayoutInflater.java:739)
    at android.view.LayoutInflater.inflate(LayoutInflater.java:489)
    at android.view.LayoutInflater.inflate(LayoutInflater.java:396)
    at android.widget.RemoteViews.apply(RemoteViews.java:1580)
    at com.android.systemui.statusbar.tablet.TabletStatusBar.inflateViews(TabletStatusBar.java:1938)
    at com.android.systemui.statusbar.tablet.TabletStatusBar.addNotificationViews(TabletStatusBar.java:1744)
    at com.android.systemui.statusbar.tablet.TabletStatusBar.addNotification(TabletStatusBar.java:891)
    at com.android.systemui.statusbar.CommandQueue$H.handleMessage(CommandQueue.java:231)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:137)
    at android.app.ActivityThread.main(ActivityThread.java:4424)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:511)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
    at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.ClassNotFoundException: com.test.ScrollingTextView
    at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:61)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:501)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:461)
    at android.view.LayoutInflater.createView(LayoutInflater.java:552)
    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:680)
    ... 16 more
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-08-05 22:32:35

RemoteView只适用于少数提到这里的标准安卓视图。特别是,您不能对它使用自己的自定义视图。

这是因为远程视图实际上是在另一个进程中运行的,并且它无法访问您定义的自定义视图类。

如果允许另一个进程加载和使用您的自定义视图,这将允许您将任意代码注入到另一个进程中,并从本质上接管它。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11812583

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档