Android 5.0ステータスバー通知アイコンの実装

5605 ワード

Android 5.0ステータスバー通知アイコンの実装私の前のブログ記事にはAndroid 5について紹介されています.0ドロップダウン通知バーショートカットスイッチの追加は、Android 5.0ステータスバー通知アイコンの実装に関する知識点に関連しています.そこで今回は、この機能がどのように実現されているのかを簡単にご紹介します.私の前のブログを知りたいなら、Android 5を開くことができます.0プルダウン通知バーショートカットスイッチの追加(必見)
Android 5.0ステータスバー通知アイコンの実装は、簡単に言えばブロードキャストを利用し、SystemUI関連の場所で処理すればよい.ここでは、まず、FMを開いたり閉じたりする場所でブロードキャストを送信する必要があります.
if(on) {//FM  
                Log.i("lyj_redio","power is on");
                Settings.System.putInt(MainActivity.this.getContentResolver(), Settings.System.FM_SYSTEMUI, 0);
                mFMTxService.powerOn();
                //M:lyj     
                Intent intent = new Intent("fm_send");
                intent.putExtra("state", true);
                MainActivity.this.sendBroadcast(intent);
            }
else {//FM  
                Settings.System.putInt(MainActivity.this.getContentResolver(), Settings.System.FM_SYSTEMUI, 1);
                mFMTxService.powerOff();
                Intent intent = new Intent("fm_send");
                intent.putExtra("state", false);
                MainActivity.this.sendBroadcast(intent);
            }

放送を送信する場所が処理され、次はSystemUIで放送を受信します.次のパスを開きます:frameworks/base/packages/systemUI/src/com/android/systemui/statusbar/phone/iPhone StatusBarPolicy.JAvaこのjavaファイルでまずString値を定義します
private static final String SLOT_FM_SEND = "fm_send"; 

登録し、放送を傍受し、画像表示を実現します.
//    
    private BroadcastReceiver mIntentReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            String action = intent.getAction();
           ....
            if(action.equals(SLOT_FM_SEND)) {
                 updateFmSend(intent);
        }
           ....
        }
    };
//        
    private final void updateFmSend(Intent intent) {
        boolean state = intent.getBooleanExtra("state", true);
        Log.i("lyj_system", "FMstate = "+state);
        if (state) {//        
                mService.setIcon(SLOT_FM_SEND, R.drawable.stat_sys_headset_with_mic, 0, null);//  FM  
                mService.setIconVisibility(SLOT_FM_SEND, true);
        }else {
            mService.setIconVisibility(SLOT_FM_SEND, false);
        }

    }
//    
    public PhoneStatusBarPolicy(Context context, CastController cast, HotspotController hotspot) {
        mContext = context;
        mCast = cast;
        mHotspot = hotspot;
        mService = (StatusBarManager)context.getSystemService(Context.STATUS_BAR_SERVICE);
        // listen for broadcasts
        IntentFilter filter = new IntentFilter();
        //M:lyj add 
        filter.addAction(SLOT_FM_SEND);
        ....
    }

ここでupdateFmSendという方法を見てみましょう.主に放送されてきたStateの値を判断します.コードは簡単で、ステータス値がtrueの場合はアイコンを開き、そうでない場合はアイコンを閉じます.OK!前のブログの文章と結びつけて見ると、あなたに役に立つと信じています.