4

説明できない問題があります。ボタンを含むメインアクティビティがあります。このボタンをクリックすると、インターネットからxmlファイルをダウンロードする新しいアクティビティが起動します。ダウンロード中に、ダウンロードの進行状況を示す通知があります。

これは私のAVD(APIレベル17)で完全に機能します。しかし、デバイス(APIレベル10のGT-I1900、Androidバージョン2.3.3)で同じことを行おうとすると、クラッシュします。

私が使っているものに問題があるとnotificationBuilder思います。

Context context = getApplicationContext();
notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
notificationBuilder = new NotificationCompat.Builder(this);
notificationBuilder.setContentTitle("Download Progress").setContentText("Downloading").setSmallIcon(android.R.drawable.stat_sys_download);

..。

notificationManager.notify(0, notificationBuilder.build());

ダウンロードには、テスト済みで正常に動作するDownloadFilesTask(extends AsyncTask)クラスを使用します。

例外ログは次のとおりです。

    at android.app.NotificationManager.notify(NotificationManager.java:91)

だから私の質問は:問題が私のデバイスのAPIレベルに存在する場合、誰かがより低いAPIに通知ビルダーを使用する方法を説明できますか?

完全なログは次のとおりです。

02-01 23:06:28.862: E/AndroidRuntime(16860): FATAL EXCEPTION: AsyncTask #1
02-01 23:06:28.862: E/AndroidRuntime(16860): java.lang.RuntimeException: An error occured while executing doInBackground()
02-01 23:06:28.862: E/AndroidRuntime(16860):    at android.os.AsyncTask$3.done(AsyncTask.java:200)
02-01 23:06:28.862: E/AndroidRuntime(16860):    at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:274)
02-01 23:06:28.862: E/AndroidRuntime(16860):    at java.util.concurrent.FutureTask.setException(FutureTask.java:125)
02-01 23:06:28.862: E/AndroidRuntime(16860):    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:308)
02-01 23:06:28.862: E/AndroidRuntime(16860):    at java.util.concurrent.FutureTask.run(FutureTask.java:138)
02-01 23:06:28.862: E/AndroidRuntime(16860):    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1088)
02-01 23:06:28.862: E/AndroidRuntime(16860):    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:581)
02-01 23:06:28.862: E/AndroidRuntime(16860):    at java.lang.Thread.run(Thread.java:1019)
02-01 23:06:28.862: E/AndroidRuntime(16860): Caused by: java.lang.IllegalArgumentException: contentIntent required: pkg=com.bakoproductions.easybet id=0 notification=Notification(vibrate=null,sound=null,defaults=0x0,flags=0x0)
02-01 23:06:28.862: E/AndroidRuntime(16860):    at android.os.Parcel.readException(Parcel.java:1326)
02-01 23:06:28.862: E/AndroidRuntime(16860):    at android.os.Parcel.readException(Parcel.java:1276)
02-01 23:06:28.862: E/AndroidRuntime(16860):    at android.app.INotificationManager$Stub$Proxy.enqueueNotificationWithTag(INotificationManager.java:322)
02-01 23:06:28.862: E/AndroidRuntime(16860):    at android.app.NotificationManager.notify(NotificationManager.java:111)
02-01 23:06:28.862: E/AndroidRuntime(16860):    at android.app.NotificationManager.notify(NotificationManager.java:91)
02-01 23:06:28.862: E/AndroidRuntime(16860):    at com.bakoproductions.easybet.XMLParser.downloadXML(XMLParser.java:83)
02-01 23:06:28.862: E/AndroidRuntime(16860):    at com.bakoproductions.easybet.DownloadFilesTask.doInBackground(DownloadFilesTask.java:24)
02-01 23:06:28.862: E/AndroidRuntime(16860):    at com.bakoproductions.easybet.DownloadFilesTask.doInBackground(DownloadFilesTask.java:1)
02-01 23:06:28.862: E/AndroidRuntime(16860):    at android.os.AsyncTask$2.call(AsyncTask.java:185)
02-01 23:06:28.862: E/AndroidRuntime(16860):    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:306)
02-01 23:06:28.862: E/AndroidRuntime(16860):    ... 4 more
4

1 に答える 1

6

古いAndroidバージョンでNotification 、コンテンツインテントが必要です。これにより、ユーザーが通知をクリックしたときに何かが発生します。これは、次のことを行う必要があることを意味します。

Intentのようなどこかを指すオブジェクトを作成しますMainActivityIntent.FLAG_ACTIVITY_NEW_TASK必ずフラグを追加してください。

Intent intent = new Intent (this, MainActivity.class);
intent.addFlags (Intent.FLAG_ACTIVITY_NEW_TASK);

それをPendingIntentに変換します

PendingIntent pend = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);

最後に、ビルダーで、

notificationBuilder.setContentIntent (pend);
于 2013-02-01T21:19:19.833 に答える