[android] 代碼注冊廣播接收者&利用廣播調用服務的方法


利用廣播調用服務里面的方法,間接的方式調用服務內部的方法,與現實中差不多,請媒體曝光

 

主界面里面

在界面創建的時候開啟一下服務普通的startService()方法

發送一條廣播出去

獲取Intent對象,通過new出來

調用Intent對象的setAction()方法,參數:一般就是包名

調用sendBroadcast(intebt)方法,發送廣播,參數:Intent對象

 

服務里面

新建一個MyService類繼承系統的Service

添加一個自定義的服務的方法callServiceMethod(),我們目的要調用的方法

 

新建一個內部類MyReceiver繼承系統的Receiver

廣播接收者既能通過清單文件注冊,也可以通過代碼的方式注冊,這是四大組件中唯一的特殊的一個

 

MyService中創建一個MyReceiver的成員變量

在服務創建的時候,注冊廣播接收者,在onCreate()方法里面

調用registerReceiver(receiver,filter)方法,注冊這個廣播接收者,參數:receiverBroadcastReceiver對象,通過new MyReceiver()來創建,filterIntentFilter對象

獲取IntentFilter對象,通過new出來

調用IntentFilter對象的addAction(action)方法,意圖過濾器對象添加監聽動作,上面發送的那個動作

 

當接收者收到信號的時候,會調用MyReceiver對象的onReceive()方法,在這個方法里面可以去調用服務的私有方法,比如callServiceMethod()

 

當服務銷毀的時候,解除注冊的廣播接收者,在onDestroy()方法里面,調用unResisterReceiver(receiver),參數:廣播接收者對象

 

MainActivity.java

 

package com.tsh.broadcallservice;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //開啟服務
        Intent intent=new Intent(this,MyService.class);
        startService(intent);
    }
    //廣播調用服務
    public void call(View v){
        Intent intent=new Intent();
        intent.setAction("com.tsh.broadcallservice");
        sendBroadcast(intent);
    }
}

 

MyService.java

package com.tsh.broadcallservice;

import android.app.Service;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.IBinder;
import android.widget.Toast;

public class MyService extends Service {
    private MyReceiver receiver;
    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }
    //服務創建的時候注冊廣播接收者
    @Override
    public void onCreate() {
        super.onCreate();
        receiver=new MyReceiver();
        IntentFilter filter=new IntentFilter();
        filter.addAction("com.tsh.broadcallservice");
        registerReceiver(receiver, filter);
    }
    //服務里面的一個方法
    public void callServiceMethod(){
        Toast.makeText(getApplicationContext(), "廣播調用服務啦", 0).show();
    }
    
    //內部類實現廣播接收者
    private class MyReceiver extends BroadcastReceiver{

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM