1. 程式人生 > >Android 中Service 和Activity之間傳值。(涉及BroadCast的基本用法)

Android 中Service 和Activity之間傳值。(涉及BroadCast的基本用法)

首先先建立一個Android工程(名字自定義)這裡我命名為MyActivity

包名為:package org.hm.myactivity;

再最後給自己的activity命名(名字自定義)此處我命名為MyTestActivity

public class MyTestActivity extends Activity{}

再新建一個Class命名為MyService 並繼承Service基類:

public class MyService extends Service{}

複寫裡面的方法並匯入需要的jar包

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;

現在service建立好了,需要在AndroidManifest.xml裡面對service註冊:包名.類名——程式碼如下:

<service    android:name="org.hm.myactivity.MyService"/>

現在我們就可以來進行activity和service之間傳值了。。。但是我們需要用到Android四大元件中的另一個重要元件:BroadCast

      注意:BroadCast也需要註冊,分為兩種方式:動態繫結或靜態註冊,此處我們選擇動態繫結的方式

首先記得一定要在MyService裡面複寫OnCreate方法:這樣,我們才能對service裡面接收到的資料進行操縱:

下面進行service的基本操作步驟解釋:

第一:首先建立一個廣播接收類(我們這裡採用建立內部類的方式)並複寫父類方法

class MyBroadCastReceive extends BroadcastReceiver{

        @Override
        public void onReceive(Context context, Intent intent) {
            // TODO Auto-generated method stub
         
        }
        
    }

第二步:建立一個MyBroadCastReceive物件並在OnCreate()函式裡面例項化該物件:

MyBroadCastReceive myReceiver;

//例項化myReceiver
myReceiver = new MyBroadCastReceive();

第三步:建立一個函式用於註冊廣播:

public void Register(){
        IntentFilter intentFilter = new IntentFilter();
        //註冊廣播
        intentFilter.addAction("ACTION_FIRST");
        //第一個引數就是上面宣告的MyBroadCastReceive類
        registerReceiver(myReceiver, intentFilter);
        
    }

這樣我們就建立好了一個廣播和服務,現在我們可以進行通訊操作了:

在建立的activity裡面傳值到Service裡面去。

我們需要在自定義的activity的OnCreate方法裡面寫上要傳遞的東西以及傳送該值使用的廣播:

        Intent intentb = new Intent();
        // 設定傳播的鍵值對:
        intentb.putExtra("index", "這是第一個廣播喲");
        // 指定傳播該值的廣播名稱:必須是已經註冊過的才可能傳值成功
        intentb.setAction("ACTION_FIRST");
        // 傳送廣播
        sendBroadcast(intentb);

現在需要在建立的Service接收器裡面接受傳遞的值;

    class MyBroadCastReceive extends BroadcastReceiver{

        @Override
        public void onReceive(Context context, Intent intent) {
            // TODO Auto-generated method stub
            String receiveIndex = intent.getStringExtra("index");
            System.out.println(receiveIndex);
        }
        
    }

然後在MyService的onCreate方法裡面呼叫Register方法即可:


        //呼叫廣播註冊函式
        Register();

現在就差最後一步了,那就是在自定義的Activity 的OnCreate()函式裡面啟動Service,但一定要記得必須在使用Service裡面的內容之前

        Intent intent = new Intent();
        //設定跳轉類
        intent.setClass(MyTestActivity.this, MyService.class);
        //啟動Service
        startService(intent);

這樣傳值過程就完成了。。。是不是很簡單

我覺得有句話一定要說:那就是註冊廣播的地方與接受廣播是在同一個類裡面。。。不要把註冊廣播的地方放錯了。。。。

相關推薦

Android Service Activity之間涉及BroadCast基本用法

首先先建立一個Android工程(名字自定義)這裡我命名為MyActivity 包名為:package org.hm.myactivity; 再最後給自己的activity命名(名字自定義)此處我命名為MyTestActivity public class MyTestA

android活動、服務之間簡單總結筆記

前言 在android中,我們經常用到活動之間傳值、活動與服務之間傳值。 整理 活動之間傳值 //傳送資料(activity1) Intent intent = new Intent(g

Android關於Activity之間的問題基礎問題

也是Android中的一種基礎知識點吧,希望還是幫助理解吧,雖然簡單點了,獻給需要的人群,僅供參考。 關於兩個Activity之間傳值的問題,首先要搞清楚兩個activity那個是父類,那個是子類,通常父類是想要結果,而讓子類幫他處理,做完以後將結果回傳給父類,我的父類是Z

Activity詳解 Intent顯式跳轉隱式跳轉, 及多個Activity之間 總結

//web瀏覽器 Uri uri= Uri.parse("http://www.baidu.com:8080/image/a.jpg"); Intent intent = new Intent(Intent.ACTION_VIEW, uri); startActivity(

Android Studio——使用Bundle在Activity之間

前面我們瞭解瞭如何啟動一個Activity,一個Activity在啟動另外一個Activity的時候可能會遇到需要傳值的需要。Activity之間傳值是通過Bundle來實現的。 一、通過Bundle傳值介紹 Intent提供了多個過載方法來攜帶資料

Android 元件系列之Activity回傳

在這篇隨筆裡將講解Activity的傳值和回傳值。 一、通過startActivity來進行Activity的傳值 在Android中,如果我們要通過一個Activity來啟動另一個Activity,可以使用 startActivity(Intent intent)方法來

Android兩個Activity之間簡單通信

idg tin test ide button ima 接收 9.png set 在Android中,一個界面被稱為一個activity,在兩個界面之間通信,采用的是使用一個中間傳話者(即Intent類)的模式,而不是直接通信。 下面演示如何實現兩個activity之間的通

AndroidServiceIntentService的差別

前言: ServiceTimeout(20 seconds)小概率型別Service在特定的時間內無法處理完成,會造成ANR — 應用程式無響應(ANR:Application Not Responding)的情況 ▲ 分析 : 避免ANR最核心的一點就是在主執行緒減少耗時操作。這時我們

ServiceIntentService,ServiceActivity之間通訊

Service /** * Android四大元件之一,Service 是長期執行在後臺的應用程式元件。 * Service 不是程序,也不是執行緒,它和應用程式在同一個程序中 * Service中不能

activity之間,解決:Parcelable encountered IOException writing serializable object異常

今天寫程式碼的時候遇到了兩個activity之間需要傳資料,本來是一件非常簡單的事情 平常都是使用 intent.putExtra(type,value);就沒問題了。 傳物件的話就需要實現序列化介面了就行了。 為什麼要實現序列化介面,你可以當這個是android的一個機制

廣播service activity 之間的通訊

廣播service 和activity 之間的通訊 文章目錄 廣播service 和activity 之間的通訊 靜態註冊 動態註冊 在avtivity 裡面建立內部的廣播接收者 b

多個Activity之間,使用Intent

感覺已經好久都沒有寫部落格了,今天來更新一篇,雖然是很零碎的知識點,但也是好不容易才擠出時間來寫的,僅供參考,大神就不要吐槽了,好了廢話就不多說了 Activity之間傳值有很多種,當然看寫程式碼的人比較趨向於哪一種了,無論用那種方式實現的目的只有一個:多個Activity

Androiddppx之間進行轉換

在xml佈局檔案中,我們既可以設定px,也可以設定dp(或者dip)。一般情況下,我們都會選擇使用dp,這樣可以保證不同螢幕解析度的機器上佈局一致。但是在程式碼中,如何處理呢?很多控制元件的方法中都只提供了設定px的方法,例如setPadding,並沒有提供設定dp的方法。

Activity 之間的幾種方式

二、通過startActivityForResult方法來得到Activity的回傳值 在一些情況下,我們通過 A activity跳轉到 B activity上,這時希望 A activtiy能從 B activity上得到一些返回值,這個時候我們就不能使用startActivity方法了,而是使用 st

AndroidServiceActivity資料互動的簡單理解

Service跟Activity是最相似的元件,都代表可執行的程式,區別在於:Service一直在後臺執行,沒有跟使用者互動的介面。 啟動與停止Service有兩種方法: 第一種通過startService()與stopService()啟動和停止服務,Se

androidfragment與activity之間通訊原理以及例子

首先,如果你想在android3.0及以下版本使用fragment,你必須引用android-support-v4.jar這個包 然後你寫的activity不能再繼承自Activity類了,而是要繼承android.support.v4.app.FragmentA

JSP,servlet資料庫之間出現亂碼的問題

 最近困擾我很久的一個問題終於解決了,為他我頭疼了好幾天,問題是JSP通過servlet向資料庫傳值,查詢顯示在頁面的時候出現了亂碼,原先我資料庫中有兩行帶有中文的資料,查詢的時候倒是沒有出現亂碼,我debug一下,發現JSP和servlet中所有接受中文字符集的變數都

AndroidServiceActivity的通訊---回撥介面方式

最近在技術交流群中有人問到:要實現service與activity的高強度通訊用什麼方法? 群友回答的是用handler,但面試官好像不太滿意,後來本人查找了下資料,得到個人的結論:service與activity之前的通訊方式有很多,回撥介面方式、觀察者模式、廣播、還有h

serviceactivity之間通訊

         service和activity通訊一般可以通過繫結service獲取service的引用呼叫service的方法。如果service要訪問activity可以通過單利模式,最好是使用廣播接受者實現通訊最優方案。 下面介紹通過廣播接受者實現activit

Android 四大元件之 Activity(2)--

Activity 之間的資料傳輸 1.  Intent 直接傳值 第一個頁面傳值的方法 Intent intent = new Intent(); intent.putExtra("one", num1); intent.putEx