成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Broadcast 使用詳解

Y3G / 2268人閱讀

摘要:靜態(tài)注冊(cè)廣播的方法動(dòng)態(tài)注冊(cè)廣播在中動(dòng)態(tài)注冊(cè)廣播,通常格式如下動(dòng)態(tài)注冊(cè)廣播動(dòng)態(tài)注冊(cè)監(jiān)聽滅屏點(diǎn)亮屏幕的廣播在廣播中動(dòng)態(tài)注冊(cè)廣播請(qǐng)注意一定要使用,防止為空,引起空指針異常。綁定模式此模式通過綁定組件等調(diào)用啟動(dòng)此服務(wù)隨綁定組件的消亡而解除綁定。

極力推薦文章:歡迎收藏
Android 干貨分享

閱讀五分鐘,每日十點(diǎn),和您一起終身學(xué)習(xí),這里是程序員Android

本篇文章主要介紹 Android 開發(fā)中的部分知識(shí)點(diǎn),通過閱讀本篇文章,您將收獲以下內(nèi)容:

廣播的生命周期

四大組件之一,必須在Androidmainfest.xml中注冊(cè)

廣播的注冊(cè)(靜態(tài)廣播、動(dòng)態(tài)廣播)

廣播的發(fā)送(正常、有序、持續(xù))

廣播接收(系統(tǒng)廣播、自定義廣播)

Broadcast Android 四大組件之一,是一種廣泛運(yùn)用在應(yīng)用程序之間異步傳輸信息的機(jī)制。
Broadcast 本質(zhì)上是一個(gè)Intent 對(duì)象,差別在于 Broadcast 可以被多個(gè) BroadcastReceiver 處理。BroadcastReceiver 是一個(gè)全局監(jiān)聽器,通過它的 onReceive() 可以過濾用戶想要的廣播,進(jìn)而進(jìn)行其它操作。

1. BroadcastReceiver簡(jiǎn)介 BroadcastReceiver繼承關(guān)系

BroadcastReceiver 默認(rèn)是在主線程中執(zhí)行,如果onReceiver() 方法處理事件超過10s,則應(yīng)用將會(huì)發(fā)生ANR(Application Not Responding),此時(shí),如果建立工作線程并不能解決此問題,因此建議:如處理耗時(shí)操作,請(qǐng)用 Service 代替。

BroadcastReceiver繼承關(guān)系 如下:

java.lang.Object
   ?    android.content.BroadcastReceiver

BroadcastReceiver 的主要聲明周期方法onReceiver(),此方法執(zhí)行完之后,BroadcastReceiver 實(shí)例將被銷毀。

2.四大組件之一,必須在Androidmainfest.xml中注冊(cè)
        
            
                
            
        

注意:
如不注冊(cè),將導(dǎo)致無法接收處理廣播消息

3.廣播的注冊(cè)(靜態(tài)注冊(cè)、動(dòng)態(tài)注冊(cè))

廣播的注冊(cè)分兩種,一種在ndroidMfest.xml中靜態(tài)注冊(cè),另一種是在Java代碼中動(dòng)態(tài)注冊(cè)。

1.靜態(tài)注冊(cè)

一些系統(tǒng)發(fā)送的廣播需要在Androidmainfest.xml 中靜態(tài)注冊(cè),例如 開機(jī)廣播,apk狀態(tài)改變廣播,電量狀態(tài)改變廣播等。這些靜態(tài)注冊(cè)的廣播,通常在Androidmainfest.xml 中攔截特定的字符串。

靜態(tài)注冊(cè)廣播的方法如下:



         ... ...
        
            
                
                
                
                
            
        
        ... ...
1.靜態(tài)注冊(cè)開機(jī)廣播方法

開機(jī)廣播比較特殊,需要在Androidmainfest.xml 中添加權(quán)限。否則,無法獲取開機(jī)廣播。



//靜態(tài)注冊(cè)廣播的方法
        
            
                
            
        
2.動(dòng)態(tài)注冊(cè)廣播

在Java中動(dòng)態(tài)注冊(cè)廣播,通常格式如下:

  //動(dòng)態(tài)注冊(cè)廣播
  registerReceiver(BroadcastReceiver, IntentFilter);
動(dòng)態(tài)注冊(cè) 監(jiān)聽滅屏、點(diǎn)亮屏幕的廣播

在廣播中動(dòng)態(tài)注冊(cè)廣播請(qǐng)注意一定要使用context.getApplicationContext(),防止context 為空 ,引起空指針異常。

public class ScreenOnOffReceiver {

    public static void ReceiverScreenOnOff(Context context) {
        IntentFilter screenOffFilter = new IntentFilter();
        screenOffFilter.addAction(Intent.ACTION_SCREEN_OFF);
        screenOffFilter.addAction(Intent.ACTION_SCREEN_ON);
        BroadcastReceiver mScreenOnOffReceiver = new BroadcastReceiver() {

            @Override
            public void onReceive(Context context, Intent intent) {
                // TODO Auto-generated method stub
                String action = intent.getAction();
                if (action.equals(Intent.ACTION_SCREEN_OFF)) {

                    Toast.makeText(context, "接收屏幕熄滅廣播", Toast.LENGTH_SHORT).show();

                }
                if (action.equals(Intent.ACTION_SCREEN_ON)) {

                    Toast.makeText(context, "接收屏幕點(diǎn)亮廣播", Toast.LENGTH_SHORT).show();
                }


            }

        };
        /**
         * context.getApplicationContext()
         * 在廣播中注冊(cè)廣播時(shí)候需要注意,防止context 為空 ,引起空指針異常
         * **/
// 2.動(dòng)態(tài)注冊(cè)廣播的方法
        context.registerReceiver(mScreenOnOffReceiver, screenOffFilter);

    }
}
4.廣播的發(fā)送(無序、有序、持續(xù)) 1.發(fā)送無序廣播的方法

發(fā)送無序廣播在Android 中很常見,是一種一對(duì)多的關(guān)系,主要通過 sendBroadcast(intent);發(fā)送廣播。

發(fā)送自定義廣播案例

廣播說白了就是一個(gè)帶Action等字符串標(biāo)記的Intent。發(fā)送自定義廣播舉例如下:

        Intent customIntent=new Intent();
        customIntent.setAction("SendCustomBroadcast");
        sendBroadcast(customIntent);
接收自定義廣播的方法

當(dāng)用戶對(duì)某些廣播感興趣的話,此時(shí)可以獲取此廣播,然后在onReceive方法中處理接收廣播的一下操作。

public class CustomBroadcast extends BroadcastReceiver {
    public CustomBroadcast() {
    }

    @Override
    public void onReceive(Context context, Intent intent) {

        if (intent.getAction().equals("SendCustomBroadcast")){
            Toast.makeText(context,"自定義廣播接收成功:Action:SendCustomBroadcast",Toast.LENGTH_SHORT).show();
        }
    }
}
注意自定義廣播是在Androidmanfest.xml 中靜態(tài)注冊(cè)的。
2.發(fā)送有序廣播

廣播在Android是有優(yōu)先級(jí)的,優(yōu)先級(jí)高的廣播可以終止或修改廣播內(nèi)容。發(fā)送有序廣播的方法如下sendOrderedBroadcast(intent,"str_receiver_permission");

例如:發(fā)送自定義有序廣播
        Intent customOrderIntent=new Intent();
        customOrderIntent.setAction("SendCustomOrderBroadcast");
        customOrderIntent.putExtra("str_order_broadcast","老板說:公司每人發(fā) 10 個(gè) 月餅");
        sendOrderedBroadcast(customOrderIntent,"android.permission.ORDERBROADCAST");

廣播屬于四大組件,一定要在AndroidMainfest.xml 中注冊(cè)。

有序廣播靜態(tài)注冊(cè)

接收有序廣播的靜態(tài)注冊(cè)方法如下:

       
            
                
            
        

        
            
                
            
        
        
            
                
            
        

有序廣播,高優(yōu)先級(jí)廣播可以優(yōu)先處理

public class CustomHightBrodcast extends BroadcastReceiver {
    public CustomHightBrodcast() {
    }

    @Override
    public void onReceive(Context context, Intent intent) {

        if (intent.getAction().equals("SendCustomOrderBroadcast")) {
            Toast.makeText(context, intent.getStringExtra("str_order_broadcast"), Toast.LENGTH_SHORT).show();
            Bundle bundle=new Bundle();
            bundle.putString("str_order_broadcast","經(jīng)理說:公司每人發(fā) 5 個(gè) 月餅");
//            修改廣播傳輸數(shù)據(jù)
            setResultExtras(bundle);
        }
    }
}

中優(yōu)先級(jí)的廣播后序處理

public class CustomMiddleBroadcast extends BroadcastReceiver {
    public CustomMiddleBroadcast() {
    }
    @Override
    public void onReceive(Context context, Intent intent) {

        if (intent.getAction().equals("SendCustomOrderBroadcast")) {
            Toast.makeText(context, getResultExtras(true).getString("str_order_broadcast"), Toast.LENGTH_SHORT).show();
            Bundle bundle=new Bundle();
            bundle.putString("str_order_broadcast","主管說:公司每人發(fā) 2 個(gè) 月餅");
            setResultExtras(bundle);
        }
    }
}

低優(yōu)先級(jí)廣播最后處理

public class CustomLowerBroadcast extends BroadcastReceiver {
    public CustomLowerBroadcast() {
    }

    @Override
    public void onReceive(Context context, Intent intent) {
        if (intent.getAction().equals("SendCustomOrderBroadcast")) {
            String notice= getResultExtras(true).getString("str_order_broadcast");
            Toast.makeText(context,notice, Toast.LENGTH_SHORT).show();
//          終止廣播繼續(xù)傳播下去
            abortBroadcast();
        }
    }
}

注意 :
有序廣播需要聲明并使用權(quán)限

1.聲明使用權(quán)限

 
    android:name="android.permission.ORDERBROADCAST" />

2.聲明權(quán)限

 
 
android:name="android.permission.ORDERBROADCAST"/>

在有序廣播中高優(yōu)先級(jí)的廣播接收廣播,可以修改數(shù)據(jù),然后傳給低優(yōu)先級(jí)的廣播。

3.發(fā)送持續(xù)廣播(已經(jīng)被棄用)

粘性廣播會(huì)在Android 系統(tǒng)中一直存在,不過隨著 Android系統(tǒng)的不斷更新,此方法逐漸被拋棄,使用方法如下:sendStickyBroadcast(intent);

5.廣播接收(系統(tǒng)廣播、自定義廣播)

當(dāng)廣播發(fā)出后,如何接收廣播呢,下面將介紹接收廣播的方法。
接受廣播類 主要繼承 BroadcastReceiver,然后在onReceive方法,過濾廣播Action中攜帶的Intent,然后進(jìn)行相關(guān)處理。

接收開機(jī)廣播的方法 1. 實(shí)現(xiàn)BootReceiverMethod 繼承 BroadcastReceiver
p ublic class BootReceiverMethod extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        //   接收開機(jī)廣播處理事情,比如啟動(dòng)服務(wù)
        Intent mStartIntent = new Intent(context, StartServiceMethods.class);
        context.startService(mStartIntent);
    }
}
2.在Androidmainfest.xml 聲明組件信息,并過濾開機(jī)完成 Action
        
            
                
            
        
3.聲明接收開機(jī)廣播完成的權(quán)限
   

極力推薦文章:歡迎收藏
Android 干貨分享

閱讀五分鐘,每日十點(diǎn),和您一起終身學(xué)習(xí),這里是程序員Android

本篇文章主要介紹 Android 開發(fā)中的部分知識(shí)點(diǎn),通過閱讀本篇文章,您將收獲以下內(nèi)容:

Service 簡(jiǎn)介

四大組件之一,必須在Androidmainfest.xml 中注冊(cè)

啟動(dòng)模式啟動(dòng)服務(wù)

綁定模式綁定服務(wù)

前臺(tái)服務(wù)

AIDL遠(yuǎn)程服務(wù)

Service Android 四大組件之一(Activity 活動(dòng),Service 服務(wù),ContentProvider 內(nèi)容提供者,BroadcastReceiver 廣播),與Activity相比,Activity 是運(yùn)行在前臺(tái),用戶可以看得見,Service 則是運(yùn)行在后臺(tái),無用戶界面,用戶無法看到。

Service主要用于組件之間交互(例如:與ActivityContentProvider、BroadcastReceiver進(jìn)行交互)、后臺(tái)執(zhí)行耗時(shí)操作等(例如下載文件,播放音樂等,但Service在主線程運(yùn)行時(shí)長(zhǎng)不能超過20s,否則會(huì)出現(xiàn)ANR,耗時(shí)操作一般建議在子線程中進(jìn)行操作)。

1.Service 簡(jiǎn)介

在了解Service 的生命周期的之前,我們先了解一下Service 的繼承關(guān)系,方便我們更好的了解Service。

Service 繼承關(guān)系如下:
java.lang.Object
   ?    android.content.Context
        ?    android.content.ContextWrapper
             ?    android.app.Service
Service 的兩種啟動(dòng)模式

Service 有兩種不同的啟動(dòng)模式 ,不同的啟動(dòng)模式對(duì)應(yīng)不同生命周期.
Service 啟動(dòng)模式主要分兩種: 1. 啟動(dòng)模式。 2. 綁定模式。

1.啟動(dòng)模式

此模式通過 startService()方法啟動(dòng),此服務(wù)可以在后臺(tái)一直運(yùn)行,不會(huì)隨啟動(dòng)組件的消亡而消亡。只能執(zhí)行單一操作,無法返回結(jié)果給調(diào)用方,常用于網(wǎng)絡(luò)下載、上傳文件,播放音樂等。

2.綁定模式

此模式 通過綁定組件(Activity等)調(diào)用 bindService() 啟動(dòng),此服務(wù)隨綁定組件的消亡而解除綁定。

如果此時(shí)沒有其它通過startService()啟動(dòng),則此服務(wù)會(huì)隨綁定組件的消亡而消亡。
多個(gè)組件不僅可以同時(shí)綁定一個(gè)Service,而且可以通過進(jìn)程間通信(IPC)執(zhí)行跨進(jìn)程操作等。

3.兩種服務(wù)可以同時(shí)運(yùn)行

啟動(dòng)模式與綁定模式的服務(wù)可以同時(shí)運(yùn)行,在銷毀服務(wù)時(shí),只有兩種模式都不在使用Service時(shí)候,才可以銷毀服務(wù),否則會(huì)引起異常。

4. 兩種 Service 模式的生命周期

兩種 Service 模式的生命周期如下:

2.四大組件之一,必須在Androidmainfest.xml 中注冊(cè) Service 注冊(cè)方法如下:

  ...
  
      
      ...
  
注意:

Service 如不注冊(cè) ,不會(huì)像Activity 那樣會(huì)導(dǎo)致App CrashService 不注冊(cè) 不會(huì)報(bào)異常信息,但是服務(wù)會(huì)起不來,如不注意很容易迷惑。

3.啟動(dòng)模式

通過啟動(dòng)模式啟動(dòng)的Service ,如不主動(dòng)關(guān)閉,Service會(huì)一直在。

啟動(dòng)模式啟動(dòng)服務(wù)的方法
        Intent  mBindIntent = new Intent(ServiceMethods.this, BindServiceMethods.class);
        startService(mStartIntent);
啟動(dòng)模式啟動(dòng)服務(wù)的生命周期

下面是驗(yàn)證啟動(dòng)模式啟動(dòng)服務(wù)的生命周期的方法,詳細(xì)生命周期請(qǐng)查看上方Service的生命周期圖。

01-03 17:16:36.147 23789-23789/com.android.program.programandroid I/StartService?wjwj:: ----onCreate----
01-03 17:16:36.223 23789-23789/com.android.program.programandroid I/StartService?wjwj:: ----onStartCommand----
01-03 17:16:38.174 23789-23789/com.android.program.programandroid I/StartService?wjwj:: ----onDestroy----
啟動(dòng)模式 啟動(dòng)服務(wù)案例

此案例功能:?jiǎn)?dòng)服務(wù),在服務(wù)中創(chuàng)建通知

    // Service 創(chuàng)建方法
    @Override
    public void onCreate() {
        super.onCreate();
        Log.i(TAG, "----onCreate----");
    }
    // Service  啟動(dòng)方法
    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        Log.i(TAG, "----onStartCommand----");
        // 獲取NotificationManager實(shí)例
        notifyManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
        // 實(shí)例化NotificationCompat.Builder并設(shè)置相關(guān)屬性
        NotificationCompat.Builder builder = new NotificationCompat.Builder(
                this)
        // 設(shè)置小圖標(biāo)
                .setSmallIcon(R.drawable.ic_launcher)
                .setLargeIcon(
                        BitmapFactory.decodeResource(getResources(),
                                R.drawable.ic_launcher))
                // 設(shè)置通知標(biāo)題
                .setContentTitle("我是通過StartService服務(wù)啟動(dòng)的通知")
                // 設(shè)置通知不能自動(dòng)取消
                .setAutoCancel(false).setOngoing(true)
                // 設(shè)置通知時(shí)間,默認(rèn)為系統(tǒng)發(fā)出通知的時(shí)間,通常不用設(shè)置
                // .setWhen(System.currentTimeMillis())
                // 設(shè)置通知內(nèi)容
                .setContentText("請(qǐng)使用StopService 方法停止服務(wù)");

        // 通過builder.build()方法生成Notification對(duì)象,并發(fā)送通知,id=1
        notifyManager.notify(1, builder.build());

        return super.onStartCommand(intent, flags, startId);
    }
    // Service  銷毀方法
    @Override
    public void onDestroy() {
        Log.i(TAG, "----onDestroy----");
        notifyManager.cancelAll();
        super.onDestroy();
    }
4. 綁定模式啟動(dòng)綁定服務(wù)

綁定模式啟動(dòng)的服務(wù)會(huì)隨著綁定逐漸的消亡而解除Service綁定,如果此時(shí)Service沒有通過啟動(dòng)模式啟動(dòng),則此服務(wù)將會(huì)被銷毀。

綁定模式啟動(dòng)綁定服務(wù)的方法

綁定模式,是通過其他組件啟動(dòng)的Service。

啟動(dòng)綁定模式服務(wù)的方法
    // 啟動(dòng)綁定服務(wù)處理方法
    public void BtnStartBindService(View view) {
        // 啟動(dòng)綁定服務(wù)處理方法
        bindService(mBindIntent, serviceConnection, Context.BIND_AUTO_CREATE);
        isBindService = true;
        Toast.makeText(ServiceMethod.this, "啟動(dòng) " + mBindCount + " 次綁定服務(wù)",
                Toast.LENGTH_SHORT).show();
    }

    
    public void BtnSopBindService(View view) {
        if (isBindService) {
            // 解除綁定服務(wù)處理方法
            unbindService(serviceConnection);
            Toast.makeText(ServiceMethod.this, "解除 " + mUnBindCount + " 次綁定服務(wù)",
                    Toast.LENGTH_SHORT).show();
            isBindService = false;
        }

    }

綁定服務(wù) 隨綁定組件的消亡而消亡

綁定模式 生命周期回調(diào)代碼如下:
    // Service 創(chuàng)建方法
    @Override
    public void onCreate() {
        super.onCreate();
        Log.i(TAG, "----onCreate----");
    }

    // Service 綁定方法
    @Override
    public IBinder onBind(Intent intent) {
        Log.i(TAG, "----onBind----");

        MyBinder myBinder = new MyBinder();
        return myBinder;
    }

    // Service 解除綁定方法
    @Override
    public boolean onUnbind(Intent intent) {

        Log.i(TAG, "----onUnbind----");
        return super.onUnbind(intent);

    }

    // Service 銷毀方法
    @Override
    public void onDestroy() {
        Log.i(TAG, "----onDestroy----");
        super.onDestroy();
    }

綁定服務(wù)的生命周期代碼打印Log信息如下:

01-03 20:32:59.422 13306-13306/com.android.program.programandroid I/BindService?wjwj:: ----onCreate----
01-03 20:32:59.423 13306-13306/com.android.program.programandroid I/BindService?wjwj:: -----onBind-----
01-03 20:33:09.265 13306-13306/com.android.program.programandroid I/BindService?wjwj:: ----onUnbind----
01-03 20:33:09.266 13306-13306/com.android.program.programandroid I/BindService?wjwj:: ----onDestroy----
綁定服務(wù)案例

功能:獲取綁定模式啟動(dòng) 綁定服務(wù)及解除綁定服務(wù)的次數(shù)

綁定服務(wù)類
package com.android.program.programandroid.component.Service;

import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.util.Log;

public class BindServiceMethods extends Service {
    private static final String TAG = "BindService wjwj:";

    public BindServiceMethods() {
    }

    @Override
    public void onCreate() {
        super.onCreate();
        Log.i(TAG, "----onCreate----");
    }

    @Override
    public IBinder onBind(Intent intent) {
        Log.i(TAG, "----onBind----");

        MyBinder myBinder = new MyBinder();
        return myBinder;
    }


    @Override
    public boolean onUnbind(Intent intent) {

        Log.i(TAG, "----onUnbind----");
        return super.onUnbind(intent);

    }

    @Override
    public void onDestroy() {
        Log.i(TAG, "----onDestroy----");
        super.onDestroy();
    }
}

組件與綁定服務(wù)類之間的交互

 //    啟動(dòng)綁定服務(wù)處理方法
    public void BtnStartBindService(View view) {

        bindService(mBindIntent, serviceConnection, Context.BIND_AUTO_CREATE);
        isBindService = true;
        Toast.makeText(ServiceMethods.this,"啟動(dòng) "+mBindCount+" 次綁定服務(wù)",Toast.LENGTH_SHORT).show();
    }

    //    解除綁定服務(wù)處理方法
    public void BtnSopBindService(View view) {
        if (isBindService) {
            unbindService(serviceConnection);
            Toast.makeText(ServiceMethods.this,"解除 "+mUnBindCount+" 次綁定服務(wù)",Toast.LENGTH_SHORT).show();
            isBindService=false;
        }

    }

組件之間交互所需的 Binder 接口類

/**
* 該類提供 綁定組件與綁定服務(wù)提供接口
* */
public class MyBinder extends Binder {
   private int count = 0;

    public int getBindCount() {
        return ++count;
    }
    public int getUnBindCount() {
        return count> 0 ? count-- : 0;
    }
}
5. 提高服務(wù)的優(yōu)先級(jí)

服務(wù)默認(rèn)啟動(dòng)方式是后臺(tái)服務(wù),但是可以通過設(shè)置服務(wù)為前臺(tái)服務(wù),提高服務(wù)的優(yōu)先級(jí),進(jìn)而避免手機(jī)內(nèi)存緊張時(shí),服務(wù)進(jìn)程被殺掉。

設(shè)置前臺(tái)服務(wù)的兩種方法

1.設(shè)置為前臺(tái)服務(wù)

//設(shè)置為前臺(tái)服務(wù)
startForeground(int, Notification)

2.取消前臺(tái)服務(wù)

//取消為前臺(tái)服務(wù)
stopForeground(true);
startForeground 前臺(tái)服務(wù)案例

功能:前臺(tái)服務(wù)綁定通知信息,提高服務(wù)進(jìn)程優(yōu)先級(jí),否則取消通知信息

package com.android.program.programandroid.component.Service;

import android.app.NotificationManager;
import android.app.Service;
import android.content.Intent;
import android.graphics.BitmapFactory;
import android.os.IBinder;
import android.support.v4.app.NotificationCompat;

import com.android.program.programandroid.R;

public class MyStartForcegroundService extends Service {

    public MyStartForcegroundService() {
    }

    @Override
    public IBinder onBind(Intent intent) {
        // TODO: Return the communication channel to the service.
        throw new UnsupportedOperationException("Not yet implemented");
    }

    @Override
    public void onCreate() {
        super.onCreate();
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {

        if (intent.getAction().equals("start_forceground_service")) {

//        獲取NotificationManager實(shí)例
            NotificationManager notifyManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
//        實(shí)例化NotificationCompat.Builder并設(shè)置相關(guān)屬性
            NotificationCompat.Builder builder = new NotificationCompat.Builder(this)
//                設(shè)置小圖標(biāo)
                    .setSmallIcon(R.mipmap.ic_launcher)
                    .setLargeIcon(BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher))
//                設(shè)置通知標(biāo)題
                    .setContentTitle("我是通過startForeground 啟動(dòng)前臺(tái)服務(wù)通知")
//                設(shè)置通知不能自動(dòng)取消
                    .setAutoCancel(false)
                    .setOngoing(true)
//                設(shè)置通知時(shí)間,默認(rèn)為系統(tǒng)發(fā)出通知的時(shí)間,通常不用設(shè)置
//                .setWhen(System.currentTimeMillis())
//               設(shè)置通知內(nèi)容
                    .setContentText("請(qǐng)使用stopForeground 方法改為后臺(tái)服務(wù)");

            //通過builder.build()方法生成Notification對(duì)象,并發(fā)送通知,id=1
//        設(shè)置為前臺(tái)服務(wù)
            startForeground(1, builder.build());

        } else if (intent.getAction().equals("stop_forceground_service")) {
            
            stopForeground(true);
        }

        return super.onStartCommand(intent, flags, startId);
    }
}
6. 使用AIDL接口實(shí)現(xiàn)遠(yuǎn)程綁定

由于內(nèi)容較多,后續(xù)另開一篇詳細(xì)介紹。

至此,本篇已結(jié)束,如有不對(duì)的地方,歡迎您的建議與指正。同時(shí)期待您的關(guān)注,感謝您的閱讀,謝謝!

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/75817.html

相關(guān)文章

  • 微信小程序wepy框架詳解(一)

    摘要:微信小程序的一種框架簡(jiǎn)述由于項(xiàng)目原因,我于兩個(gè)多月前轉(zhuǎn)到微信端用進(jìn)行開發(fā)。事件發(fā)起組件的所有祖先組件會(huì)依次接收到事件。注意,如果用了自定義事件,則中對(duì)應(yīng)的監(jiān)聽函數(shù)不會(huì)再執(zhí)行。 wepy——微信小程序的一種框架 簡(jiǎn)述 由于項(xiàng)目原因,我于兩個(gè)多月前轉(zhuǎn)到微信端用wepy進(jìn)行開發(fā)。wepy開發(fā)風(fēng)格接近于 Vue.js,支持組件 Props 傳值,自定義事件、組件分布式復(fù)用Mixin、Redux...

    maochunguang 評(píng)論0 收藏0
  • Intent 使用詳解

    摘要:注意類別指示此的圖標(biāo)應(yīng)放入系統(tǒng)的應(yīng)用啟動(dòng)器。如果元素未使用指定圖標(biāo),則系統(tǒng)將使用元素中的圖標(biāo)使用方法對(duì)象是對(duì)象的包裝器。主要應(yīng)用于以下場(chǎng)景通知應(yīng)用小部件定時(shí)任務(wù)使用注意事項(xiàng)適用于啟動(dòng)的。 showImg(https://segmentfault.com/img/remote/1460000019975019?w=157&h=54); 極力推薦文章:歡迎收藏Android 干貨分享 s...

    lifesimple 評(píng)論0 收藏0
  • Android插件化之-Resource Hook

    摘要:方法,是一個(gè)對(duì)象是從構(gòu)造函數(shù)中賦值。上面我們分析到會(huì)執(zhí)行構(gòu)造函數(shù),在構(gòu)造函數(shù)會(huì)將的賦值給的。傳入的是返回對(duì)象也是繼承,其是。參考插件化技術(shù)原理篇中詳解你所不知道的更深層次的理解 Android插件化在國(guó)內(nèi)已不再是幾個(gè)巨頭公司團(tuán)隊(duì)在玩了,陸續(xù)有團(tuán)隊(duì)開源其解決方案,例如 Small,VirtualAPK,RePlugin,Atlas,甚至Lody開發(fā)的VirtualApp。另外我司也在玩,...

    jayce 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<