0

GCM プッシュ通知を使用するアプリがあります。テストしている電話 (HTC Desire C、Samsung mini など) に通知をプッシュすると、正常に動作します。通知は、バグ修正が含まれているアプリの URL です。

通常、プッシュが受信され、クリックするとブラウザが開き、ダウンロードが開始されます。ダウンロードが完了すると、ユーザーは通知ドローで通知をクリックし、アプリのインストール/アップグレードを行うことができます。

問題は、Motorola defy mini XT320 でこれを実行しようとしたときです。プッシュを受け取ることはできますが、ブラウザーが開くまでに 1 秒ほどかかり、ダウンロードは開始されません。

誰にも理由はありますか?以下は、エラーとともに通知を生成する方法です。ブラウザーが開くと、ダイアログ ボックスが一瞬表示されます。リークされたウィンドウエラーであるため、エラーがこれに関係している可能性があることはわかっています。このダイアログ ボックスは作成しません。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: android.widget.EditText@408d6ca0 mServedView=android.widget.EditText@408d6ca0 winFocus=false
05-31 15:39:02.170: V/InputMethodManager(1310): focusOut: android.webkit.WebView@408bb1a0 mServedView=android.widget.EditText@408d6ca0 winFocus=false
05-31 15:39:02.180: V/browser(1310): BrowserActivity.onDestroy: this=com.android.browser.BrowserActivity@407ec730
05-31 15:39:02.290: E/WindowManager(1310): Activity com.android.browser.BrowserActivity has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView@408da548 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 com.android.internal.policy.impl.PhoneWindow$DecorView@408da548 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)

[編集1]

 @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
4

2 に答える 2

0

ダウンロード マネージャーが正常に動作しない理由はわかりましたが、まだ原因は不明です。

// Start download
     DownloadManager dm = (DownloadManager) getSystemService(DOWNLOAD_SERVICE);
     dm.enqueue(r);

        displayMessage(context, message);
        // notifies user
        generateNotification(context, message);

.

上記のコードでダウンロード マネージャーを起動すると、その後の displayMessage() と generateNotification() の呼び出しがダウンロードを妨げているようです。後続のコードをコメントアウトすると、DownloadManager は正常に動作するようです。私が言うように、理由はわかりません。

于 2013-06-10T09:22:19.343 に答える