我想利用谷歌的样品用在我的Android应用程序的自定义通知这里(部分创建自定义通知布局).由于我使用了这个确切的代码,我RuntimeException每隔几次就会收到通知.
我的堆栈跟踪:
FATAL EXCEPTION: main
java.lang.RuntimeException: bad array lengths
at android.os.Parcel.readIntArray(Parcel.java:677)
at android.app.INotificationManager$Stub$Proxy.enqueueNotificationWithTag(INotificationManager.java:369)
at android.app.NotificationManager.notify(NotificationManager.java:110)
at android.app.NotificationManager.notify(NotificationManager.java:90)
at com.****.service.UpdateFeedService.notifyUpdateProgress(UpdateFeedService.java:266)
at com.****.service.task.PodcastUpdaterTask.onProgressUpdate(PodcastUpdaterTask.java:63)
at com.****.service.task.PodcastUpdaterTask.onProgressUpdate(PodcastUpdaterTask.java:1)
at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:432)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:144)
at android.app.ActivityThread.main(ActivityThread.java:4937)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:521)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
at dalvik.system.NativeStart.main(Native Method)
Run Code Online (Sandbox Code Playgroud)
我的代码:
private final Intent updateInProgressIntent = new Intent(this.context, PodcastListActivity.class);
private RemoteViews updateInProgressContentView = null;
private PendingIntent updateInProgressPendingIntent = null;
private Notification updateInProgressNotification = null;
...
@Override
public void onCreate() {
super.onCreate(); …Run Code Online (Sandbox Code Playgroud) Parcelables并.为什么他们不能更容易?我正在尝试编写一个将ArrayList作为parcelable发送的应用程序.当我尝试在第二个Activity中获取Intent时,我会收到错误:
12-29 21:36:08.158: W/System.err(20117): java.lang.RuntimeException: bad array lengths
12-29 21:36:08.158: W/System.err(20117): at android.os.Parcel.readStringArray(Parcel.java:967)
12-29 21:36:08.158: W/System.err(20117): at net.sutomaji.sv.helperclasses.NewsItem.<init>(NewsItem.java:102)
12-29 21:36:08.158: W/System.err(20117): at net.sutomaji.sv.helperclasses.NewsItem$1.createFromParcel(NewsItem.java:129)
12-29 21:36:08.158: W/System.err(20117): at net.sutomaji.sv.helperclasses.NewsItem$1.createFromParcel(NewsItem.java:1)
12-29 21:36:08.158: W/System.err(20117): at android.os.Parcel.readParcelable(Parcel.java:2104)
12-29 21:36:08.158: W/System.err(20117): at android.os.Parcel.readValue(Parcel.java:2013)
12-29 21:36:08.158: W/System.err(20117): at android.os.Parcel.readListInternal(Parcel.java:2343)
12-29 21:36:08.158: W/System.err(20117): at android.os.Parcel.readArrayList(Parcel.java:1703)
12-29 21:36:08.158: W/System.err(20117): at android.os.Parcel.readValue(Parcel.java:2034)
12-29 21:36:08.158: W/System.err(20117): at android.os.Parcel.readArrayMapInternal(Parcel.java:2314)
12-29 21:36:08.158: W/System.err(20117): at android.os.Bundle.unparcel(Bundle.java:249)
12-29 21:36:08.158: W/System.err(20117): at android.os.Bundle.getParcelableArrayList(Bundle.java:1250)
12-29 21:36:08.158: W/System.err(20117): at android.content.Intent.getParcelableArrayListExtra(Intent.java:4680)
12-29 21:36:08.158: W/System.err(20117): at net.sutomaji.sv.MainActivity.onCreate(MainActivity.java:104)
12-29 21:36:08.158: …Run Code Online (Sandbox Code Playgroud) 我想在应用程序内显示一个通知,当在不启动活动的情况下点击通知时该通知会消失。
我使用一个空的意图,它的工作原理:
Intent intent = new Intent();
PendingIntent contentIntent = PendingIntent.getActivity(context, (int)System.currentTimeMillis(), intent, PendingIntent.FLAG_UPDATE_CURRENT);
NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(context, "")
.setSmallIcon(R.drawable.icon)
.setContentTitle(title)
.setContentText(text)
.setAutoCancel(true)
.setTicker(text);
.setContentIntent(contentIntent);
Run Code Online (Sandbox Code Playgroud)
但是,有一些崩溃:
java.lang.RuntimeException: bad array lengths
at android.os.Parcel.readIntArray(Parcel.java:789)
at android.app.INotificationManager$Stub$Proxy.enqueueNotificationWithTag(INotificationManager.java:339)
at android.app.NotificationManager.notify(NotificationManager.java:139)
at android.app.NotificationManager.notify(NotificationManager.java:112)
...
Run Code Online (Sandbox Code Playgroud)
根据this SO answer,崩溃似乎是因为intent没有开始活动。
通知可以通过其 ID 解除,但是当没有活动要启动并调用解除方法时,我无法解除通知。
如何在不使用空意图的情况下在应用内点击关闭通知?
根据这个SO问题,它似乎是一个Android问题。我收到的崩溃报告也发生在 Android 4.3 上。
根据this SO answer,这似乎是由于使用setLargeIcon. 所以我现在用 Glide 减小位图大小。
我知道可包裹物是隐藏的秘密,但现在我不认为我需要了解它们。
这是我之前的代码:
...
parcel.writeBooleanArray(new boolean[]{booleanValue1, booleanValue2, booleanValue3});
....
boolean[] booleans = new boolean[3];
in.readBooleanArray(booleans);
...
Run Code Online (Sandbox Code Playgroud)
不知何故,它无法在除我之外的许多设备上工作,所以我无法重现它。然后我决定将其更改为:
...
parcel.writeBooleanArray(new boolean[]{booleanValue1});
parcel.writeBooleanArray(new boolean[]{booleanValue2});
parcel.writeBooleanArray(new boolean[]{booleanValue3});
...
boolean[] booleans1 = new boolean[1];
boolean[] booleans2 = new boolean[1];
boolean[] booleans3 = new boolean[1];
in.readBooleanArray(booleans1);
in.readBooleanArray(booleans2); // it crashes here
in.readBooleanArray(booleans3);
....
Run Code Online (Sandbox Code Playgroud)
包裹的源代码:
public final void readBooleanArray(boolean[] val) {
int N = readInt();
if (N == val.length) {
for (int i=0; i<N; i++) {
val[i] = readInt() != 0;
}
} else {
throw new …Run Code Online (Sandbox Code Playgroud)