我有一个使用GCM推送通知的应用程序。当我向我测试的手机(HTC Desire C,三星mini等)推送通知时,它可以正常工作。该通知是修复了错误的应用程序的网址。BrowserActivity泄漏了窗口
通常会发生的是收到推送,一旦点击浏览器打开并下载开始。下载完成后,用户可以点击通知画面中的通知和应用程序安装/升级。
问题是,当我试图在摩托罗拉藐视迷你XT320上运行这个。它可以接收推送,但浏览器在关闭之前第一次打开并且下载未启动。
有没有人有任何想法为什么?以下是我如何生成通知以及错误。浏览器打开时,我可以看到一秒钟弹出一个对话框。我知道这个错误可能与此有关,因为它是一个泄漏的窗口错误。我不创建这个对话框,它是Android浏览器活动的一部分。
在此先感谢。
private static void generateNotification(Context context, String message) {
int icon = R.drawable.ic_launcher;
long when = System.currentTimeMillis();
NotificationManager notificationManager = (NotificationManager)
context.getSystemService(Context.NOTIFICATION_SERVICE);
Notification notification = new Notification(icon, message, when);
String title = context.getString(R.string.app_name);
//Intent notificationIntent = new Intent(context, EntryActivity.class);
Intent notificationIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(message));
// set intent so it does not start a new activity
notificationIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP |
Intent.FLAG_ACTIVITY_SINGLE_TOP);
PendingIntent intent =
PendingIntent.getActivity(context, 0, notificationIntent, 0);
notification.setLatestEventInfo(context, title, message, intent);
notification.flags |= Notification.FLAG_AUTO_CANCEL;
// Play default notification sound
notification.defaults |= Notification.DEFAULT_SOUND;
// Vibrate if vibrate is enabled
notification.defaults |= Notification.DEFAULT_VIBRATE;
notificationManager.notify(0, notification);
}
。
05-31 15:39:01.940: V/InputMethodManager(1310): focusOut: [email protected] [email protected] winFocus=false
05-31 15:39:02.170: V/InputMethodManager(1310): focusOut: [email protected] [email protected] winFocus=false
05-31 15:39:02.180: V/browser(1310): BrowserActivity.onDestroy: [email protected]
05-31 15:39:02.290: E/WindowManager(1310): Activity com.android.browser.BrowserActivity has leaked window [email protected] that was originally added here
05-31 15:39:02.290: E/WindowManager(1310): android.view.WindowLeaked: Activity com.android.browser.BrowserActivity has leaked window [email protected] that was originally added here
05-31 15:39:02.290: E/WindowManager(1310): at android.view.ViewRoot.<init>(ViewRoot.java:259)
05-31 15:39:02.290: E/WindowManager(1310): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:148)
05-31 15:39:02.290: E/WindowManager(1310): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:91)
05-31 15:39:02.290: E/WindowManager(1310): at android.view.Window$LocalWindowManager.addView(Window.java:424)
05-31 15:39:02.290: E/WindowManager(1310): at android.app.Dialog.show(Dialog.java:241)
05-31 15:39:02.290: E/WindowManager(1310): at android.app.AlertDialog$Builder.show(AlertDialog.java:802)
05-31 15:39:02.290: E/WindowManager(1310): at com.android.browser.BrowserActivity.onDownloadStart(BrowserActivity.java:3492)
05-31 15:39:02.290: E/WindowManager(1310): at com.android.browser.Tab$4.onDownloadStart(Tab.java:1349)
05-31 15:39:02.290: E/WindowManager(1310): at android.webkit.CallbackProxy.handleMessage(CallbackProxy.java:388)
05-31 15:39:02.290: E/WindowManager(1310): at android.os.Handler.dispatchMessage(Handler.java:99)
05-31 15:39:02.290: E/WindowManager(1310): at android.os.Looper.loop(Looper.java:130)
05-31 15:39:02.290: E/WindowManager(1310): at android.app.ActivityThread.main(ActivityThread.java:3689)
05-31 15:39:02.290: E/WindowManager(1310): at java.lang.reflect.Method.invokeNative(Native Method)
05-31 15:39:02.290: E/WindowManager(1310): at java.lang.reflect.Method.invoke(Method.java:507)
05-31 15:39:02.290: E/WindowManager(1310): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:875)
05-31 15:39:02.290: E/WindowManager(1310): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:633)
05-31 15:39:02.290: E/WindowManager(1310): at dalvik.system.NativeStart.main(Native Method)
[EDIT1]
@Override
protected void onMessage(Context context, Intent intent) {
Log.i(TAG, "Received message");
String message = intent.getExtras().getString("price");
Log.e(TAG, "message from gcm = " + message);
Uri Download_Uri = Uri.parse(message);
DownloadManager.Request r = new DownloadManager.Request(Download_Uri);
// This put the download in the same Download dir the browser uses
r.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, "RR3UPGRADE");
// Notify user when download is completed
// (Seems to be available since Honeycomb only)
// r.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
// Start download
DownloadManager dm = (DownloadManager) getSystemService(DOWNLOAD_SERVICE);
dm.enqueue(r);
displayMessage(context, message);
// notifies user
generateNotification(context, message);
}
。
06-04 11:38:05.624: I/ActivityManager(207): Starting: Intent { act=android.intent.action.VIEW dat=content://downloads/all_downloads/63 typ=application/vnd.android.package-archive flg=0x10000001 cmp=com.android.packageinstaller/.PackageInstallerActivity } from pid 421
06-04 11:38:05.664: W/PackageParser(1203): Skipping dir: /all_downloads/63
06-04 11:38:05.664: W/PackageInstaller(1203): Parse error when parsing manifest. Discontinuing installation
好的。我追溯了logcat错误,它看起来像下载有问题。 'W/PackageParser(1203):跳过目录:/ all_downloads/63' <==>'if(!sourceFile.isFile()){Slog.w(TAG,“Skipping dir:”+ mArchiveSourcePath); mParseError = PackageManager.INSTALL_PARSE_FAILED_NOT_APK;返回null; }'。看起来下载不成功。 – ozbek
你有什么想法可以尝试解决这个问题吗? – turtleboy
我已经尝试将下载管理器代码与AsyncTask放在一起,因为我发现了一个线程,指示要下载.apk,最好是异步执行它。它没有任何区别。 – turtleboy