gpt4 book ai didi

android - 如何使通知 Intent 恢复而不是新的 Intent ?

转载 作者:IT王子 更新时间:2023-10-29 00:03:20 27 4
gpt4 key购买 nike

我这里有一个简单的 webview Activity ,当它加载时会自动显示正在进行的通知。这个想法是,人们可以离开这个 Activity ,并通过下拉下拉菜单并选择它,从他们想要的任何屏幕快速再次访问它。然后,当他们需要时,他们可以通过点击菜单按钮并点击退出来关闭通知,然后通知就会清除。这一切都很好。但是,当按下通知时,它会启动一个新的 Activity 实例。我必须更改什么才能查看 Activity 是否尚未被销毁,我可以只调用该实例(恢复它),因此不需要再次加载它,也不需要向我的堆栈添加另一个 Activity .有任何想法吗?任何帮助将不胜感激。

package com.my.app;

import com.flurry.android.FlurryAgent;

import android.app.Activity;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.webkit.CookieSyncManager;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Toast;

public class Chat extends Activity {
private ProgressDialog progressBar;
public WebView webview;
private static final String TAG = "Main";

private NotificationManager mNotificationManager;
private int SIMPLE_NOTFICATION_ID;

@Override
public void onStart() {
super.onStart();
CookieSyncManager.getInstance().sync();
FlurryAgent.onStartSession(this, "H9QGMRC46IPXB43GYWU1");
}

public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.chat);

mNotificationManager = (NotificationManager)getSystemService(NOTIFICATION_SERVICE);

final Notification notifyDetails = new Notification(R.drawable.chat_notification,"Chat Started",System.currentTimeMillis());

notifyDetails.flags |= Notification.FLAG_ONGOING_EVENT;

Context context = getApplicationContext();

CharSequence contentTitle = "Chat";
CharSequence contentText = "Press to return to chat";

Intent notifyIntent = new Intent(context, Chat.class);

PendingIntent intent =
PendingIntent.getActivity(Chat.this, 0,
notifyIntent, android.content.Intent.FLAG_ACTIVITY_NEW_TASK);
notifyDetails.setLatestEventInfo(context, contentTitle, contentText, intent);

mNotificationManager.notify(SIMPLE_NOTFICATION_ID, notifyDetails);

CookieSyncManager.createInstance(this);
CookieSyncManager.getInstance().startSync();
webview = (WebView) findViewById(R.id.webviewchat);
webview.setWebViewClient(new chatClient());
webview.getSettings().setJavaScriptEnabled(true);
webview.getSettings().setPluginsEnabled(true);
webview.loadUrl("http://google.com");

progressBar = ProgressDialog.show(Chat.this, "", "Loading Chat...");
}

private class chatClient extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
Log.i(TAG, "Processing webview url click...");
view.loadUrl(url);
return true;
}

public void onPageFinished(WebView view, String url) {
Log.i(TAG, "Finished loading URL: " +url);
if (progressBar.isShowing()) {
progressBar.dismiss();
}
}
}

public boolean onKeyDown(int keyCode, KeyEvent event) {
if ((keyCode == KeyEvent.KEYCODE_BACK) && webview.canGoBack()) {
webview.goBack();
return true;
}
return super.onKeyDown(keyCode, event);
}

@Override
public boolean onCreateOptionsMenu (Menu menu) {
super.onCreateOptionsMenu(menu);
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.chatmenu, menu);
return true;
}

@Override
public boolean onOptionsItemSelected (MenuItem item) {
switch (item.getItemId()) {
case R.id.home:
Intent a = new Intent(this, Home.class);
startActivity(a);
return true;
case R.id.closechat:
mNotificationManager.cancel(SIMPLE_NOTFICATION_ID);
Intent v = new Intent(this, Home.class);
startActivity(v);
return true;
}
return false;
}

public void onStop() {
super.onStop();
CookieSyncManager.getInstance().sync();
FlurryAgent.onEndSession(this);
}
}

@Commonsware

只是为了确定我的说法是正确的,这是你的建议吗?

我有点担心这条线,

PendingIntent.getActivity(Chat.this, 0, notifyIntent, SIMPLE_NOTFICATION_ID);

public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.chat);

mNotificationManager = (NotificationManager)getSystemService(NOTIFICATION_SERVICE);

final Notification notifyDetails = new Notification(R.drawable.chat_notification,"Chat Started",System.currentTimeMillis());

notifyDetails.flags |= Notification.FLAG_ONGOING_EVENT;


Context context = getApplicationContext();

CharSequence contentTitle = "Chat";
CharSequence contentText = "Press to return to chat";

Intent notifyIntent = new Intent(context, Chat.class);

PendingIntent intent =
PendingIntent.getActivity(Chat.this, 0, notifyIntent, SIMPLE_NOTFICATION_ID);
notifyDetails.setLatestEventInfo(context, contentTitle, contentText, intent);
notifyIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);

mNotificationManager.notify(SIMPLE_NOTFICATION_ID, notifyDetails);


CookieSyncManager.createInstance(this);
CookieSyncManager.getInstance().startSync();
webview = (WebView) findViewById(R.id.webviewchat);
webview.setWebViewClient(new chatClient());
webview.getSettings().setJavaScriptEnabled(true);
webview.getSettings().setPluginsEnabled(true);
webview.loadUrl("http://google.com");

progressBar = ProgressDialog.show(Chat.this, "", "Loading Chat...");
}

最佳答案

The idea is that people can navigate away from this activity and quickly access it again from any screen they want by pulling down the drop down menu and selecting it.

请将此设为可选。

However, when the notification is pressed it starts a new instance of the activity.

默认情况下会发生这种情况。

What would i have to change to make it see if the activity has not already been destroyed and i can just call that instance back(resume it) and therefore not needing to load it again and won't need to add another activity to my stack.

摆脱 FLAG_ACTIVITY_NEW_TASK。添加 notifyIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP); -- 见 this sample project .

Context context = getApplicationContext();

请不要这样做。只需将您的 Activity 用作 Context

关于android - 如何使通知 Intent 恢复而不是新的 Intent ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3305088/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com