【问题标题】:Android - Resume backgrounded app when my app finishesAndroid - 我的应用程序完成后恢复后台应用程序
【发布时间】:2016-02-10 19:11:55
【问题描述】:

基本上,我正在用 chrome 浏览互联网或查看其他应用程序。我收到一条打开我的应用程序的通知。我做了一些事情,它完成了。我的应用程序关闭,我回到了启动器。如何让我的应用完成并返回到我之前浏览的任何应用/Chrome 页面?

此活动的 AndroidManifest 部分:

<activity
        android:name=".AcceptRejectActivity"
        android:label="@string/title_activity_accept_reject"
        android:screenOrientation="portrait" >
    </activity>

通知代码:

mNotificationManager = (NotificationManager)
            this.getSystemService(Context.NOTIFICATION_SERVICE);
    Intent resultIntent = new Intent(this, AcceptRejectActivity.class);
    resultIntent.putExtra("message","Do you choose to accept this message?");      

    TaskStackBuilder stackBuilder = TaskStackBuilder.create(this);
    stackBuilder.addParentStack(AcceptRejectActivity.class);

    // Adds the Intent that starts the Activity to the top of the stack //
    stackBuilder.addNextIntent(resultIntent);
    PendingIntent contentIntent =
            stackBuilder.getPendingIntent(
                    0,
                    PendingIntent.FLAG_UPDATE_CURRENT
            );
    String msg = "You have a message"
    NotificationCompat.Builder mBuilder =
            new NotificationCompat.Builder(this)
                    .setSmallIcon(R.drawable.ic_logo)
                    .setContentTitle("Message")
                    .setStyle(new NotificationCompat.BigTextStyle()
                            .bigText(msg))
                    .setContentText(msg)
                    .setPriority(Notification.PRIORITY_HIGH);
    mBuilder.setContentIntent(contentIntent);
    mBuilder.setAutoCancel(true);

    android.app.Notification note = mBuilder.build();
    note.defaults |= android.app.Notification.DEFAULT_VIBRATE;
    note.defaults |= android.app.Notification.DEFAULT_SOUND;        

    mNotificationManager.notify(0, note);

片段的关闭函数

private void allDone() {
        Log.i(TAG, "The choice has been made");            
        getActivity().finish();
        //NavUtils.navigateUpFromSameTask(getActivity());
    }

【问题讨论】:

    标签: android android-fragments android-intent android-notifications back-stack


    【解决方案1】:

    这有点奇怪,但就像一个选项一样,您可以在完成应用程序后打开浏览器。

    private void allDone() {
            Log.i(TAG, "The choice has been made");            
            getActivity().finish(); //finish your app!.
            //NavUtils.navigateUpFromSameTask(getActivity());
    
          try { //Open browser!.
                Uri uri = Uri.parse("googlechrome://navigate?url=");
                Intent i = new Intent(Intent.ACTION_VIEW, uri);
                i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                startActivity(i);
            } catch (ActivityNotFoundException e) {
                // Chrome is not installed
            }
    
    }
    

    然后您将返回您的 Chrome 会话;)。

    【讨论】:

    • 是的,这有点奇怪。调用完成()用于关闭我的应用程序并将我返回到我所在的任何应用程序。有点像跨应用程序 onbackpressed。然后有一天它停止了工作。这会重新启动 chrome,但不会让我回到当前页面。如果我在 facebook、inbox 或任何其他应用程序中,仍然无法解决。
    • 这将显示您最后打开的 chrome 页面,如果您想打开特定页面只需添加 url,例如:?url=facebook.com
    【解决方案2】:

    我设法解决了我的问题。

    Android 清单:

    <activity
            android:name=".AcceptRejectActivity"
            android:label="@string/title_activity_accept_reject"
            android:screenOrientation="portrait"
            android:launchMode="singleInstance"
            android:excludeFromRecents="true">
        </activity>
    

    通知代码: 更改了 pendingIntent 的创建方式。

    mNotificationManager = (NotificationManager)
            this.getSystemService(Context.NOTIFICATION_SERVICE);
    Intent resultIntent = new Intent(this, AcceptRejectActivity.class);
    resultIntent.putExtra("message","Do you choose to accept this message?");      
    
    PendingIntent contentIntent = PendingIntent.getActivity(this, 0, resultIntent, PendingIntent.FLAG_UPDATE_CURRENT);
    
    String msg = "You have a message"
    NotificationCompat.Builder mBuilder =
            new NotificationCompat.Builder(this)
                    .setSmallIcon(R.drawable.ic_logo)
                    .setContentTitle("Message")
                    .setStyle(new NotificationCompat.BigTextStyle()
                            .bigText(msg))
                    .setContentText(msg)
                    .setPriority(Notification.PRIORITY_HIGH);
    mBuilder.setContentIntent(contentIntent);
    mBuilder.setAutoCancel(true);
    
    android.app.Notification note = mBuilder.build();
    note.defaults |= android.app.Notification.DEFAULT_VIBRATE;
    note.defaults |= android.app.Notification.DEFAULT_SOUND;        
    
    mNotificationManager.notify(0, note);
    

    现在,当我完成处理后,我可以调用 finish() 或 getActivity().finish(),它会带我回到您在单击通知之前所在的任何应用程序/浏览器页面。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多