欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Android切換前后臺點擊通知進(jìn)入當(dāng)前頁面

 更新時間:2023年03月06日 09:52:07   作者:Spig跟著fly學(xué)前端  
這篇文章主要介紹了Android切換前后臺點擊通知進(jìn)入當(dāng)前頁面,主要講述當(dāng)App退出到后臺的后,怎么點擊通知回到原來按下HOME鍵之前的前臺頁面,需要的朋友可以參考下

  在上一節(jié)講述了,本人使用的怎么判斷App退到后臺的兩種方式,這里主要講述當(dāng)App退出到后臺的后,怎么點擊通知回到原來按下HOME鍵之前的前臺頁面.

  首先,先展示效果,有圖才有真相

  效果如上圖,當(dāng)我們按下back鍵或者HOME鍵的時候.程序退到后臺,彈出通知,點開通知回到當(dāng)前頁面.   在上節(jié)中,我有講述到判斷程序退到后臺的兩種方式.  第一種方式:在BaseActivity中onPause方法中判斷程序退出后臺之后,進(jìn)入廣播頁面:

public class BaseActivity extends AppCompatActivity {
    private static final String TAG = "BaseActivity";
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        AppManager.getInstance().addActivity(this);
    }
    @Override
    protected void onPause() {
        super.onPause();
        if(!isAppOnForeground()){
            Toast.makeText(getApplicationContext(), TAG+"onPause:",
                    Toast.LENGTH_SHORT).show();
        }else {
            Log.e(TAG, "onPause: "+"彈出通知");
            //第一種方式退到后臺
            Intent _intent = new Intent(DemoBroadcastReceiver.ACTION_NOTIFY_MESSAGE);
            _intent.setClass(getApplicationContext(), DemoBroadcastReceiver.class);
            sendBroadcast(_intent);
        }
    }

第二種方式,在Application中中onStopActivity方法中判斷程序退出后臺之后,進(jìn)入廣播頁面:

@Override
    public void onActivityStopped(Activity activity) {
        countActivity--;
        L.i("onActivityStopped", "countActivity=" + countActivity);
        if (countActivity <= 0) {
            if (WDRTCSysConfig.getInstance().isCalling()) {
                Intent _intent = new Intent(WDBroadcastReceiver.ACTION_ENABLE_MESSAGES);
                _intent.setClass(getApplicationContext(), WDBroadcastReceiver.class);
                sendBroadcast(_intent);
            }
          
        } 
   }

不管是方法一或者 方法 二:都是進(jìn)入廣播服務(wù)中,進(jìn)行判斷然后彈出Notification通知出來.主要代碼如下:

@Override
    public void onReceive(Context context, Intent intent) {
        switch (intent.getAction()) {
            case ACTION_NOTIFY_MESSAGE:
                String name = null;
                String avatar = null;
                
                //方法一:從系統(tǒng)的Stack中拿到當(dāng)前的Activity
             /*  ActivityManager mActivityManager = ((ActivityManager) context.getApplicationContext()
                        .getSystemService(Context.ACTIVITY_SERVICE));
                List<ActivityManager.RunningTaskInfo> taskInfos = mActivityManager.getRunningTasks(1);
                Class<?> _class = taskInfos.get(0).topActivity.getClass();
                */
                
                //方法二:從AppManger的Stack中拿到當(dāng)前的Activity
                Class<?> _class = AppManager.getInstance().currentActivity().getClass();
                if (_class != null) {
                    if (null != reflectionActivity()) {
                        //拿到反射的數(shù)據(jù)
                        Bundle _bundle = reflectionActivity();
                        if (_bundle != null) {
                            name = _bundle.getString("name");
                            avatar = _bundle.getString("avatar");
                        }
                    }
                    NotificationUtils _notifyUtils = NotificationUtils.getInstance();
                    _notifyUtils.init(context.getApplicationContext(), _class);
                    _notifyUtils.showNotification("從" + name + "退出到后臺");
                }
                break;
        }
    }

注意上面代碼:有兩種方式拿到當(dāng)前的Activity. 這兩個這里先簡單介紹,后面詳細(xì)解釋 稍微注意下第21行:這里主要通過反射拿到當(dāng)前Activity要傳給通知欄顯示的信息,; 而通知欄的主要代碼如下:沒什么好解釋的

public void showNotification(@NonNull String contentText){
        PendingIntent _pendingIntent = PendingIntent.getActivity(mContext, notifId, mNotificationIntent,
                PendingIntent.FLAG_UPDATE_CURRENT);
        NotificationCompat.Builder builder = new NotificationCompat.Builder(mContext);
        builder.setLargeIcon(BitmapFactory.decodeResource(mContext.getResources(),R.mipmap.ic_launcher))
                .setSmallIcon(R.mipmap.ic_launcher)
                .setContentTitle("通知測試")
                .setContentText(contentText)
                .setSubText(mContext.getString(R.string.notice_click_into))
                .setPriority(Notification.PRIORITY_HIGH)
                .setVibrate(new long[]{0, 0, 0, 10})
                //.setFullScreenIntent(_pendingIntent, true)
                .setContentIntent(_pendingIntent);
        //在什么狀態(tài)下顯示通知,比如鎖屏狀態(tài)
        if (Build.VERSION.SDK_INT >= 21) {
            builder.setVisibility(Notification.VISIBILITY_PUBLIC);
            builder.setCategory(Notification.CATEGORY_MESSAGE);
        }
        mNotification = builder.build();
        mNotificationManager.notify(notifId, mNotification);
    }

 關(guān)于怎樣獲取當(dāng)前的Activity,這里是主要的關(guān)鍵,這里我使用了兩種方法: 方法二: 我自己手動建立了一個Activity的Stack的工具欄,然后對Activity進(jìn)行增刪操作處理,主要代碼如下:

public class AppManager {
    private static AppManager instance;
    private static Stack<Activity> activityStack;
    public static AppManager getInstance() {
        if (instance == null) {
            //懶漢雙層鎖,保證線程安全
            synchronized (AppManager.class) {
                if (instance == null) {
                    instance = new AppManager();
                }
            }
        }
        return instance;
    }
    /**
     * 添加Activity到stack中
     */
    public void addActivity(Activity activity) {
        if (activityStack == null) {
            activityStack = new Stack<>();
        }
        if (activityStack.contains(activity)) {
            activityStack.remove(activity);
        }
        activityStack.add(activity);
    }
    /**
     * 獲取stack中當(dāng)前的Activity
     */
    public Activity currentActivity() {
        if (null != activityStack && null != activityStack.lastElement()) {
            return activityStack.lastElement();
        }
        return null;
    }
    /**
     * 移除當(dāng)前的Activity
     */
    public void finishActivity() {
        if (null != activityStack && null != activityStack.lastElement()) {
            finishActivity(activityStack.lastElement());
        }
    }
}

這是一個單例,然后在BaseActivity的onCreate中調(diào)用Add方法,在Activity要finish的時候,調(diào)用這里的finishActivity方法,而CurrentActivity就是我們需要的當(dāng)前的Activity;

 @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        AppManager.getInstance().addActivity(this);
    }

另外還有一種方式就是獲取當(dāng)前Activity的方法,就是程序系統(tǒng)本身就有一個Stack的,我們可以通過管理 ActivityManager. getRunningTasks(1) 來拿到當(dāng)前的Activity,這是我在網(wǎng)上看到的.

ActivityManager mActivityManager = ((ActivityManager) _app
                .getSystemService(Context.ACTIVITY_SERVICE));
        List<RunningTaskInfo> taskInfos = mActivityManager.getRunningTasks(1);
  Class<?> intentActivity = taskInfos.get(0).topActivity.getClass();

但是由于  mActivityManager . getRunningTasks ( 1 ) 在 API21以后是過期的,而且需要一個task的配置權(quán)限.本人沒有使用它,來進(jìn)行處理.好了,大致的程序就是這些,具體的可以下載demo; 點擊這里:Demo下載

到此這篇關(guān)于Android切換前后臺點擊通知進(jìn)入當(dāng)前頁面的文章就介紹到這了,更多相關(guān)android切換前后臺內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Android使用CountDownTimer類實現(xiàn)倒計時鬧鐘

    Android使用CountDownTimer類實現(xiàn)倒計時鬧鐘

    這篇文章主要為大家詳細(xì)介紹了Android使用CountDownTimer類實現(xiàn)倒計時鬧鐘,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • Flutter?LinearProgressIndicator使用指南分析

    Flutter?LinearProgressIndicator使用指南分析

    這篇文章主要為大家介紹了Flutter?LinearProgressIndicator使用指南分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-03-03
  • Android ListView在Fragment中的使用示例詳解

    Android ListView在Fragment中的使用示例詳解

    這篇文章主要介紹了Android ListView在Fragment中的使用,因為工作一直在用mvvm框架,因此這篇文章是基于mvvm框架寫的,本文通過示例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-09-09
  • Android如何動態(tài)改變App桌面圖標(biāo)

    Android如何動態(tài)改變App桌面圖標(biāo)

    這篇文章主要介紹了 Android動態(tài)改變App桌面圖標(biāo)的方法,非常不錯,具有參考借鑒價值,需要的朋友參考下
    2017-01-01
  • Android開發(fā)筆記之探秘WebView

    Android開發(fā)筆記之探秘WebView

    瀏覽器控件是每個開發(fā)環(huán)境都具備的,這為馬甲神功提供了用武之地,windows的有webbrowser,android和ios都有webview。只是其引擎不同,相對于微軟的webbrowser,android及ios的webview的引擎都是webkit,對Html5提供支持。本篇主要介紹android的webview。
    2014-08-08
  • Android Handler中的休眠喚醒實現(xiàn)詳解

    Android Handler中的休眠喚醒實現(xiàn)詳解

    這篇文章主要為大家介紹了Android Handler中的休眠喚醒實現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-01-01
  • Android?debug包運(yùn)行正常release包崩潰的解決辦法

    Android?debug包運(yùn)行正常release包崩潰的解決辦法

    這篇文章主要介紹了Android?debug包運(yùn)行正常,release包崩潰解決辦法,文中通過代碼示例介紹的非常詳細(xì),對大家解決問題有一定的幫助,需要的朋友可以參考下
    2024-04-04
  • Android實現(xiàn)簡單的加載進(jìn)度條

    Android實現(xiàn)簡單的加載進(jìn)度條

    這篇文章主要為大家詳細(xì)介紹了Android實現(xiàn)簡單的加載進(jìn)度條,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-05-05
  • Android 圖片特效如何實現(xiàn)及總結(jié)

    Android 圖片特效如何實現(xiàn)及總結(jié)

    這篇文章主要介紹了Android 圖形特效如何實現(xiàn)及總結(jié)的相關(guān)資料,這里對Android圖像特效的實現(xiàn)比如:旋轉(zhuǎn),放大,縮小,傾斜等,需要的朋友可以參考下
    2016-12-12
  • Android中隱藏標(biāo)題欄和狀態(tài)欄的方法

    Android中隱藏標(biāo)題欄和狀態(tài)欄的方法

    Android中隱藏標(biāo)題欄和狀態(tài)欄的方法,需要的朋友可以參考一下
    2013-05-05

最新評論