android如何接收廣播
① Android 第六講 廣播接收器和服務
兩種方式:靜態注冊和動態注冊
動態注冊:
1)動態注冊:需要定義一個繼承自BroadcastReceiver類的子類,該接收器需要在Activity中的onDestroy中注銷
2)靜態注冊:通過在AndroidManifest.xml中配置
兩種廣播形式:有序廣播和無序廣播
1)無序廣播:接受標准廣播的接收器將同時收到廣播消息,非同步執行,沒有先後順序 sendBroadCast
2)有序廣播:sendOrderedBroadCast,按照一定順序先後被接受順序,由priority屬性決定,abortBroadCast中斷廣播
如果只想在本應用中發送和接受廣播,使用LocalBroadcastReceiver來對廣播進行管理
本地廣播不支持靜態注冊
優點 :安全高效
Service是Android中的一種組件,和Activity的級別一致,但不能自己運行,只能後台運行,和其他組件交互,服務必須注冊才能使用
本地服務:服務依附在主線程中,節約資源,主線程死掉服務終止
遠程服務:服務在獨立進程中,靈活性好 ,佔用資源高
兩種服務的啟動模式:
1)start方式:調用者和服務之間沒有關聯,調用者退出不會影響服務,startService啟動服務,如果服務不存在,調用onCreat方法,然後onStartCommand被調用。stopService關閉服務,onDestroy方法被調用
2)bind方式:調用者和服務綁定,調用者退出,服務終止bindService啟動服務,onCreate方法創建服務,onBind方法綁定服務,onUnbind方法解綁,onDestory在服務結束時調用
② 無收音機功能的安卓Android手機中怎麼收聽廣播
今天,小編給大家分享在無收音機功能的安卓Android手機中收聽廣播的方法,希望對大家有所幫助。
具體如下:
1. 首先,請大家在自己的手機中完成「中國廣播」App的下載和安裝,然後點擊打開這個App,來到它的主界面。
2. 第二步,我們來到如圖所示的新界面,請大家選擇其中的「電台」按鈕。
3. 第三步,接下來,請大家選擇新界面中的「本地台」選項。
4. 第四步,如圖所示,屏幕中出現了這樣的新界面,請大家根據自己所需選擇一個需要添加到收藏中的電台,然後點一下它後面的❤即可。
5. 有的朋友是首次使用這個App,那麼是要注冊的,我們需要先來到登錄界面,然後選擇其中的「注冊」選項。
6. 第六步,完成上一步後,請大家根據要求輸入手機號,接著即可獲取簡訊驗證碼,請輸入驗證碼,再選擇「下一步」就行了。
7.第七步,我們需要在新界面中輸入用戶昵稱,接著輸入密碼以及身份證號,完成後請選擇「提交注冊」選項。
8. 第八步,我們需要在如圖所示的「本地台」界面繼續上面講的第四步驟操作,這樣就能將自己喜歡的電台添加到收藏中了。
9. 第九步,我們還可以選擇一個電台然後進入它的播放界面,我們會在新界面中發現一個❤標志,這就表示我們已經收藏了該電台,我們還能點擊屏幕右上方的「分享」把此電台分享給好友呢。
10. 最後,屏幕中出現了如圖所示的新界面,請大家選擇自己喜歡的分享方法,這樣就能成功把電台分享出去。
③ 求高手 android開機廣播 為什麼在模擬器能接收到 在真機上卻接收不到
看系統版本, 低於 3.1的版本, 無需載體 , 廣播都能夠 自動運行 。 3.1以及以後的版本 ,廣播 需要有 Activity的支撐,並且運行程序後啟動一次,重新開機才能夠啟動廣播,就這點區別。
④ 注冊廣播有幾種方式,這些方式有何優缺點請談談Android引入廣播機制的用意。
android中,不同進程之間傳遞信息要用到廣播,可以有兩種方式來實現。
第一種方式:在Manifest.xml中注冊廣播,是一種比較推薦的方法,因為它不需要手動注銷廣播(如果廣播未注銷,程序退出時可能會出錯)。
具體實現在Manifest的application中添加:上面兩個android:name分別是廣播名和廣播的動作(這里的動作是表示系統啟動完成),如果要自己發送一個廣播,在代碼中為:
Intent i = new Intent(「android.intent.action.BOOT_COMPLETED」);
sendBroadcast(i);
這樣,廣播就發出去了,然後是接收。
接收可以新建一個類,繼承至BroadcastReceiver,也可以建一個BroadcastReceiver的實例,然後得寫onReceive方法,實現如下:
protected BroadcastReceiver mEvtReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (action.equals(「android.intent.action.BOOT_COMPLETED」)) {
//Do something
}
}
};
第二種方式,直接在代碼中實現,但需要手動注冊注銷,實現如下:
IntentFilter filter = new IntentFilter();
filter.addAction(「android.intent.action.BOOT_COMPLETED」);
registerReceiver(mEvtReceiver, filter); //這時注冊了一個recevier ,名為mEvtReceiver,然後同樣用上面的方法以重寫onReceiver,
最後在程序的onDestroy中要注銷廣播,實現如下:
@Override
public void onDestroy() {
super.onDestroy();
unregisterReceiver(mPlayerEvtReceiver);
}
⑤ android 廣播自定義廣播接收問題
其實沒啥技術可言的,就是Android中可以自定義許可權的,對於四大組件的訪問加上一層保護,不多說了,直接上代碼:
發送廣播:
[java] view plain
package com.tt.test;
import android.app.Activity;
import android.content.ComponentName;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
public class Main extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
((Button)findViewById(R.id.button)).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent i = new Intent("COM.MESSAGE");
i.addCategory("receiver");
i.putExtra("message", "haha");
sendOrderedBroadcast(i, "xvtian.gai.receiver");
}
});
}
}
AndroidManifest.xml:
[html] view plain
<uses-permission android:name="xvtian.gai.receiver" ></uses-permission>
<permission android:protectionLevel="normal" android:name="xvtian.gai.receiver"></permission>
接收廣播:
[java] view plain
package com.tt.receiver;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;
public class Receiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Log.d("TAG", "receiver intent:" + intent.toString());
}
}
AndroidManifest.xml
[html] view plain
<uses-permission android:name="xvtian.gai.receiver" ></uses-permission>
[html] view plain
<receiver android:name=".Receiver" android:permission="xvtian.gai.receivers">
<intent-filter>
<action android:name="COM.MESSAGE" />
<category android:name="receiver" />
</intent-filter>
</receiver>