第四章 Android 四大應用組件

安卓的入門基礎就是四大應用組件。分別是:Activity(活動),Service(服務),Content Provider(內容提供者),Broadcast Receiver(廣播接收者)。一般在面試或者筆試的過程中,這些都是最基本的問題。一個應用里面會有很多個Activity,這個不同的Activity 分別具備不同的功能,指引用戶進行下一步的操作。

1.Activity

1.1 Activity的介紹

Activity 是用戶與屏幕進行交互執(zhí)行電話,拍照,啟動應用等操作。簡單來說就是用戶在操作的過程中,看到的畫面。

1.2 Activity的跳轉和銷毀

每個Activity 都可以啟動另一個Activity ,但是系統(tǒng)會自動在你啟動另一個Activity的時候,將原有的Activity保存在棧中。棧遵循“先進后出,后進先出”的原則。當新的Activity啟動的時候,舊的Activity會的推送到棧上,獲取焦點。用戶點擊返回的時候,銷毀當前的Activity,回到舊的Activity。還有一種情況,就是當你從A Activity跳轉B Activity 的時候,要求你返回的時候不能返回到 A Activity ,而是返回到 A Activity 的再上一個Activity。系統(tǒng)這時候會提供 finish()方法,結束當前Activity。如圖所示。

情況一
情況二

1.3 Activity 的創(chuàng)建和生命周期

在創(chuàng)建Activity的時候,你就必須要了解Activity 的生命周期,了解一個Activity從創(chuàng)建,到結束的過程。簡記: CSRPSD(創(chuàng)始人盤絲洞),記不住自己打自己一巴掌

生命周期圖

1.4 Activity 的聲明

在上一節(jié)中,我們說到 AndroidManifest.xml 文件中,我們會指定其中的某一個Activity為“ 主Activity” ,也就是啟動該App的時候,程序的入口。

<activity android:name=".MainActivity">
?? <intent-filter>
?? ?? <action android:name="android.intent.action.MAIN" />
?? ?? <category android:name="android.intent.category.LAUNCHER" />
?? </intent-filter>

 </activity>

<activity>這個標簽必須自<application>這個標簽中。 <intent-filter>標簽是過濾器。<action>是聲明標簽 android:name="android.intent.action.MAIN" ,這就聲明了 .MainActivity是主Activity,也就是程序的入口。<category>元素指定此 Activity 應列入系統(tǒng)的應用啟動器內(以便用戶啟動該 Activity)。
只有一個Activity 具備上述的操作和 "LAUNCHER"這個類別。否則會報錯

1.5 Activity 的啟動

假如是 MainActivity 跳轉到SingleActivity

1.5.1 顯式啟動

方式一:
    Intent intent = new Intent(MainActivity.this, SingleActivity .class);
    startActivity(intent);

方式二:
   Component component = new Component(this,SingleActivity .class);
  Intent intent = new Intent();
  intent.setComponent(component);
  startActivity(intent);

方式三:
    Intent intent = new Intent();
  intent.setclass(this,SingleActivity .class);
  startActivity(intent);


1.5.2 隱式跳轉

1.5.2.1 隱式跳轉之Action跳轉

1.在 AndroidManifest.xml文件中注冊

<activity android:name=".SignInActivity";   
     <intent-filter  
         <action android:name="customer_action_here"  />
     </intent-filter>  
 </activity>  

2.在java代碼中調用

//創(chuàng)建一個隱式的 Intent 對象:Action 動作 
    Intent intent = new Intent();
//設置 Intent 的動作為清單中指定的action  
   intent.setAction("customer_action_here");
   startActivity(intent);

1.5.2.2 隱式跳轉之Category跳轉

1.在 AndroidManifest.xml文件中注冊

<activity android:name=".SignInActivity" >  
    <intent-filter>  
        <action android:name="customer_action_here" />  
        <category android:name="customer_category_here" />  
    </intent-filter>  
</activity>  

2.在java代碼中調用

//創(chuàng)建一個隱式的 Intent 對象:Category 類別  
Intent intent = new Intent();  
intent.setAction("customer_action_here");  
//添加與清單中相同的自定義category  
intent.addCategory("customer_category_here");  
startActivity(intent);  
1.5.2.3 隱式跳轉之Data跳轉

1.在 AndroidManifest.xml文件中注冊

< activity android:name=".SignInActivity">  
    < intent-filter>  
        < category android:name="android.intent.category.DEFAULT" />  
        < data  
            android:scheme="content"  
            android:host="com.example.intentdemo"  
            android:port="8080"  
            android:pathPattern=".*pdf"  
            android:mimeType="text/plain"/>  
    < /intent-filter>  
< /activity> 

2.在java代碼中調用

//創(chuàng)建一個隱式的 Intent 對象,方法四:Date 數據  
Intent intent = new Intent();  
Uri uri = Uri.parse("content://com.example.intentdemo:8080/abc.pdf");  
intent.setDataAndType(uri, "text/plain");  
startActivity(intent);  
1.5.2.4 拓展 隱式跳轉之瀏覽網頁
Uri  uri=new Uri ("www.baidu.com");
Intent intent = new Intent(Intent.ACTION_VIEW, uri);  
startActivity(intent); 

1.5.2.5 拓展 隱式跳轉之調用地圖

//打開地圖查看經緯度  
Uri uri = Uri.parse("geo:38.899533,-77.036476");  
Intent intent = new Intent(Intent.ACTION_VIEW, uri);  
startActivity(intent); 

1.5.2.6 拓展 隱式跳轉之調用電話撥號(不需要撥號權限)

Uri uri = Uri.parse("tel:10086");  
Intent intent = new Intent(Intent.ACTION_DIAL, uri);
startActivity(intent);  

1.5.2.7 拓展 隱式跳轉之調用電話直接撥號(需要撥號權限)

Uri uri = Uri.parse("tel:15980665805");  
Intent intent = new Intent(Intent.ACTION_CALL, uri);//注意區(qū)別于上面的aciton  
startActivity(intent); 

1.5.2.8 拓展 隱式跳轉之調用短信程序

Intent intent = new Intent(Intent.ACTION_VIEW);      
intent.putExtra("sms_body", "這里寫短信內容");      
intent.setType("vnd.android-dir/mms-sms");      
startActivity(intent);  

//指定了接受者
Uri uri = Uri.parse("smsto:10086");//指定接收者  
Intent intent = new Intent(Intent.ACTION_SENDTO, uri);  
intent.putExtra("sms_body", "你這個黑心運營商");  
startActivity(intent);  

1.5.2.9 拓展 隱式跳轉之調用郵件程序

Intent intent = new Intent(Intent.ACTION_SENDTO);   
intent.setData(Uri.parse("mailto:xxx@gmail.com"));   
intent.putExtra(Intent.EXTRA_SUBJECT, "這是標題");   
intent.putExtra(Intent.EXTRA_TEXT, "這是內容");   
startActivity(intent);  

1.5.2.10 拓展 隱式跳轉之調用音樂播放器

Intent intent = new Intent(Intent.ACTION_VIEW);  
//Uri uri = Uri.parse("file:///sdcard/xiong_it.mp4");  
Uri uri = Uri.parse("file:///sdcard/xiong_it.mp3");  
intent.setDataAndType(uri, "audio/mp3");  
startActivity(intent);  

1.5.2.11 拓展 隱式跳轉之調用視頻播放器

Intent intent = new Intent(Intent.ACTION_VIEW);  
//Uri uri = Uri.parse("file:///sdcard/xiong_it.mp3");  
Uri uri = Uri.parse("file:///sdcard/xiong_it.mp4");  
intent.setDataAndType(uri, "video/mp4");  
startActivity(intent);  

1.5.2.12 拓展 隱式跳轉之調用視頻播放器

Intent intent = new Intent();   
intent.setAction(Intent.ACTION_WEB_SEARCH);   
intent.putExtra(SearchManager.QUERY, "android");   
startActivity(intent);  

2. Service 服務

2.1 Service 的介紹

Service 一個可以在后臺執(zhí)行長時間運行操作而不提供用戶界面的應用組件。 Activity 是可以看見的而Service是不能看見的。服務可由其他應用組件啟動,而且即使用戶切換到其他應用,服務仍將在后臺繼續(xù)運行。 此外,組件可以綁定到服務,以與之進行交互,甚至是執(zhí)行進程間通信 (IPC)。 例如,服務可以處理網絡事務、播放音樂,執(zhí)行文件 I/O 或與內容提供程序交互,而所有這一切均可在后臺進行。

Service 不是單獨的運行,默認情況下是運行在主程序中。

Service 存在價值雖然不如Activity那么明顯,在執(zhí)行一些耗時的操作的時候需要用到Service ,而主程序一般不執(zhí)行耗時操作,這樣會阻塞線程,所以必須重開一個子線程,再將子線程用于執(zhí)行耗時操作。Service充當線程管理者的角色

2.2 Service的啟動方式和生命周期

Service 的啟動方式
1)、 Context.startService()
調用者與服務之間沒有關聯(lián),即使調用者退出,服務仍可運行
2)、 Context.bindService()
調用者與服務綁定在一起,調用者一旦退出,服務也就終止

生命周期

2.3 Started Service總結:

1.Activity頁面中需要startService(intent) 和 stopService(intent)兩個方法來啟動Service和停止Service;

  1. 繼承于Service類的自定義子類——MyStartService類中,生命周期回調方法有:onCreate() 、onStartCommand() 、onDestroy();
  2. 如果停止服務,可以在Activity中調用stopService(intent),也可以intent到Service中執(zhí)行stopSelf()方法;

4.執(zhí)行停止服務方法,會回調Service生命周期中的onDestroy()方法;
5.如果希望關閉Activity窗體,服務也停止,那么在Activity的onDestroy()方法中執(zhí)行stopService()方法。如果希望關閉窗體后,服務還繼續(xù),那么Activity的onDestroy()中不執(zhí)行停止服務即可;
6.在StartService中不會回調onBind()方法;

  1. 在停止服務后,如果再次點擊“播放”,可以重新啟動StartService。

在實際使用的時候最后自定義一個類繼承service.

3.Content Provider

我覺得將Content Provide 叫做內容提供者挺合適的。談Content Provide的時候就必須套說說數據庫了。數據庫在Android 是私有的,這樣你就不能隨便拿我的數據了。數據的安全性就得到了保障,但是當你需要將自己數據庫的數據提供給別的應用程序的時候,你該怎么辦呢?這時候就需要Content Provider來實現(xiàn)了。其他的應用程序需要使用數據的時候,可以通過Content Resolve來操作Content Provider暴露出來的數據。
?? 一旦某個應用程序通過Content Provider暴露了自己的數據操作接口,那么不管該應用程序是否啟動,其他應用程序都可以通過該接口來操作被暴露的內部數據,包括增加數據、刪除數據、修改數據、查詢數據等。
??雖然大部分使用Content Provider操作的數據都來自于數據庫,但是也可以來自于文件、SharedPreferences、XML或網絡等其他存儲方式。

3.1 Content Provider的核心類

1、Content Provider:(A應用暴露數據)
● 一個程序可以通過實現(xiàn)一個Content Provider的抽象接口將自己的數據暴露出去;
● 外界根本看不到,也不用看到這個應用暴露的數據在應用當中是如何存儲的,是用數據庫存儲還是用文件存儲,還是通過網上獲得,這些一切都不重要,重要的是外界可以通過這一套標準及統(tǒng)一的接口和程序里的數據打交道,可以讀取程序的數據,也可以修改程序的數據。
2、Content Resolver:(操作A應用所暴露的數據)
● 外界的程序通過ContentResolver接口可以訪問ContentProvider提供的數據;
● ContentResolver 可以理解成是HttpClient的作用。
3、 Uri:Uri是ContentResolver和ContentProvider進行數據交換的標識。
● 每個ContentProvider提供公共的URI來唯一標識其數據集。管理多個數據集的(多個表)的 ContentProvider 為每個數據集提供了單獨的URI。
● Uri 的標準前綴:以“content://”作為前綴,這個是標準的前綴,表示該數據由 ContentProvider 管理。
● Uri 的authority部分:該部分是完整的類名。(使用小寫形式)。
● Uri 的path部分(資源部分、數據部分): 用于決定哪類數據被請求。
● 被請求的特定記錄的id值。如果請求不僅限于某個單條數據,該部分及其前面的斜線應該刪除。
● 為了將一個字符串轉換成Uri,Android中提供了Uri的parse()靜態(tài)方法來實現(xiàn)。
【備注:】URI、URL、URN的區(qū)別:
● 首先,URI,是uniform resource identifier,統(tǒng)一資源標識符,用來唯一的標識一個資源。
● URL是uniform resource locator,統(tǒng)一資源定位器,它是一種具體的URI,即URL可以用來標識一個資源,而且還指明了如何locate這個資源。
● URN,uniform resource name,統(tǒng)一資源命名,是通過名字來標識資源,比如mailto:java-net@java.sun.com
也就是說,URI是以一種抽象的,高層次概念定義統(tǒng)一資源標識,而URL和URN則是具體的資源標識的方式。URL和URN都是一種URI。
總結一下:URL是一種具體的URI,它不僅唯一標識資源,而且還提供了定位該資源的信息。URI是一種語義上的抽象概念,可以是絕對的,也可以是相對的,而URL則必須提供足夠的信息來定位,所以,是絕對的。

3.2 使用ContentResolver 操作數據的步驟:

1、調用Context的getContentResolver()方法獲得ContentResolver 對象;
2、調用使用ContentResolver 的insert()、delete()、update()、query()方法操作數據。
● Uri insert(Uri uri, ContentValues values)
● int delete(Uri uri, String where, String[] whereArgs)
● int update(Uri uri, ContentValues values, String where, String[] whereArgs)
● Cursor query(Uri uri, String[] projection, String where, String[] whereArgs, String sortOrder)
參數解釋:
String where:表示帶有占位符的where子句組成的字符串;
String[] whereArgs:表示替換where參數中占位符后的數據組成的字符串數組;
String sortOrder:表示select語句中的order by子句組成的字符串;
String[] projection:表示select語句中需要查詢的所有的字段組成的字符串數組。
ContentValues values:是由數據庫中表字段和往該字段中放置的數據所組成的鍵值對對象。
【備注:】以上四個方法的參數分別是2、3、4、5個。

4.Broadcast 廣播 或者 Broadcast Receiver 廣播接收器

廣播接收器,也被稱為全局事件,或系統(tǒng)事件。
??當Android系統(tǒng)中任何程序有動作時,如果想通知其他程序,采用廣播的方式進行傳播是非常有效的。廣播從理論上說,可以將一個動作傳播給任意多個程序(當然,廣播接收器的數量會收到系統(tǒng)限制)。
??在Android中,有一些操作完成以后,會發(fā)送廣播,比如說發(fā)出一條短信,或打出一個電話,如果某個程序接收了這個廣播,就會做相應的處理。這個廣播跟我們傳統(tǒng)意義中的電臺廣播有些相似之處。之所以叫做廣播,就是因為它只負責“說”而不管你“聽不聽”,也就是不管你接收方如何處理。另外,廣播可以被不只一個應用程序所接收,當然也可能不被任何應用程序所接收。
??廣播機制最大的特點就是發(fā)送方并不關心接收方是否接到數據,也不關心接收方是如何處理數據的。
??Android中廣播的是操作系統(tǒng)中產生的各種各樣的事件。例如,收到一條短信就會產生一個收到短信息的事件。而Android操作系統(tǒng)一旦內部產生了這些事件,就會向所有的廣播接收器對象來廣播這些事件。

4.1 廣播機制的三要素

Android廣播機制包含三個基本要素:
1、廣播(Broadcast) - 用于發(fā)送廣播;
2、廣播接收器(Broadcast Receiver) - 用于接收廣播;
3、意圖內容(Intent)-用于保存廣播相關信息的媒介。
Broadcast是一種廣泛運用的在應用程序之間傳輸信息的機制。而Broadcast Receiver是對發(fā)送出來的Broadcast進行過濾接受并響應的一類組件。

4.2 廣播的生命周期:

1、廣播接收器僅在它執(zhí)行這個方法時處于活躍狀態(tài)。當onReceive()返回后,它即為失活狀態(tài)。
2、擁有一個活躍狀態(tài)的廣播接收器的進程被保護起來而不會被殺死,但僅擁有失活狀態(tài)組件的進程則會在其它進程需要它所占有的內存的時候隨時被殺掉。
3、如果響應一個廣播信息需要很長的一段時間,一般會將其納入一個衍生的線程中去完成,而不是在主線程內完成它,從而保證用戶交互過程的流暢。廣播接收程序的時間限制為10秒。

4.3 注冊Broadcast Receiver的方法

Broadcast Receiver用于監(jiān)聽被廣播的事件(Intent),為了達到這個目的,Broadcast Receiver必須進行注冊,注冊的方法有以下兩種:
1、靜態(tài)注冊:
靜態(tài)注冊方式是在AndroidManifest.xml的application里面定義receiver并設置要接收的action。
如果在清單配置文件中配置了廣播接收器,那么程序在安裝后會自動注冊廣播接收器。
靜態(tài)注冊方式的特點:不管該應用程序是否處于活動狀態(tài),都會進行監(jiān)聽。

<receiver 
    android:name=".CallReceiver"
    android:enabled="true">
    <intent-filter >
        <action android:name="android.intent.action.PHONE_STATE"/>
    </intent-filter>
</receiver>

其中MyReceiver為繼承Broadcast Receiver的類,重寫了onReceiver方法,并在onReceiver方法中對廣播進行處理。<intent-filter>標簽設置過濾器,接收指定action廣播。

2、動態(tài)注冊:
動態(tài)注冊方式是在activity里面調用當前上下文對象的registerReceiver() 方法 來注冊,和靜態(tài)的內容差不多。一個形參是receiver對象,另一個是IntentFilter對象。而IntentFilter構造方法的參數是要接收的action。
動態(tài)注冊方式特點:在代碼中進行注冊后,當應用程序關閉后,就不再進行監(jiān)聽。

MyReceiver receiver = new MyReceiver();
//創(chuàng)建過濾器,并指定action,使之用于接收同action的廣播
IntentFilter filter = new IntentFilter("android.intent.action.PHONE_STATE");
//注冊廣播接收器
registerReceiver(receiver, filter);

4.4 發(fā)送廣播

// 指定廣播目標Action
Intent intent = new Intent("MyReceiver_Action");
// 可通過Intent攜帶消息
intent.putExtra("msg", "發(fā)送廣播");
// 發(fā)送廣播消息
sendBroadcast(intent);

4.5、注銷BroadcastReceiver:

1、一般在onStart中注冊BroadcastReceiver,在onStop中取消BroadcastReceiver。
2、一個BroadcastReceiver 對象只有在被調用onReceive(Context, Intent)時才有效,當從該函數返回后,該對象就無效的了,結束生命周期。

//注銷廣播接收器
unregisterReceiver(receiver);

4.6 代碼中的使用

4.6.1 攔截短信

  <receiver
            android:name=".MySmsReceiver"
            android:enabled="true"
            android:exported="true" >
            <intent-filter android:priority="1" >
                <action android:name="android.provider.Telephony.SMS_RECEIVED" >
                </action>
            </intent-filter>
        </receiver>
//Protocol Data Unit  (PDU:協(xié)議數據單元)
public void onReceive(Context context, Intent intent) {
        Log.i(TAG, "==來短信了");
        // 獲取短信的具體信息:短信發(fā)送號碼,短信內容,短信發(fā)送時間
        Bundle bundle = intent.getExtras();
        Object[] pdus = (Object[]) bundle.get("pdus");
        SmsMessage[] smsMessage = new SmsMessage[pdus.length];
        for (int i = 0; i < pdus.length; i++) {
            smsMessage[i] = SmsMessage.createFromPdu((byte[]) pdus[i]);
        }
        String phoneNumber = smsMessage[0].getDisplayOriginatingAddress();
        StringBuilder sb = new StringBuilder();
        for (SmsMessage sms : smsMessage) {
            sb.append(sms.getDisplayMessageBody());
        }
        String content = sb.toString();
        Log.i(TAG, "==來短信了" + phoneNumber + ":" + content);
                abortBroadcast();

    }

4.6.2 、來去電監(jiān)聽:

public void onReceive(Context context, Intent intent) {
        Log.i(TAG, "==電話狀態(tài)改變了");
        TelephonyManager manager = (TelephonyManager) context
                .getSystemService(Service.TELEPHONY_SERVICE);
        Bundle bundle = intent.getExtras();
        // String phoneNumber0 = bundle
        // .getString(TelephonyManager.EXTRA_INCOMING_NUMBER);
        phoneNumber = bundle.getString("incoming_number");
        prefs = context.getSharedPreferences("phonenumber",
                Context.MODE_PRIVATE);
        if (phoneNumber != null) {
            editor = prefs.edit();
            editor.putString("phoneNumber", phoneNumber);
            editor.commit();
        } else {
            phoneNumber = prefs.getString("phoneNumber", "");
        }
        int state = manager.getCallState();
        switch (state) {
        case TelephonyManager.CALL_STATE_RINGING:// 鈴聲響動
            Log.i(TAG, "==鈴聲響了" + phoneNumber);
            break;
        case TelephonyManager.CALL_STATE_OFFHOOK:// 電話接聽
            Log.i(TAG, "==接聽電話" + phoneNumber);
            break;
        case TelephonyManager.CALL_STATE_IDLE:// 掛電話了
            Log.i(TAG, "==電話掛了" + phoneNumber);
            break;
        default:
            break;
        }
    }
<receiver
            android:name=".MyPhoneReceiver"
            android:enabled="true"
            android:exported="true" >
            <intent-filter>
                <action android:name="android.intent.action.PHONE_STATE" >
                </action>
            </intent-filter>
        </receiver>

4.6.3 截獲屏幕休眠與喚醒

public void onReceive(Context context, Intent intent) {
        if (Intent.ACTION_SCREEN_OFF.equals(intent.getAction())) {
            Log.i(TAG, "==屏幕休眠了");
        }
        if (Intent.ACTION_SCREEN_ON.equals(intent.getAction())) {
            Log.i(TAG, "==屏幕喚醒了");
        }
    }

【注冊:】
ScreenOffOnReceiver myReceiver = new ScreenOffOnReceiver();
IntentFilter filter = new IntentFilter();
filter.addAction(Intent.ACTION_SCREEN_OFF);
filter.addAction(Intent.ACTION_SCREEN_ON);
registerReceiver(myReceiver, filter);
【備注:】屏幕喚醒和休眠廣播只能在代碼中注冊,如果在清單配置文件中注冊將不起作用。

4.6.4 開機自動運行

    public void onReceive(Context context, Intent intent) {
        Toast.makeText(context, "監(jiān)聽到開機了", Toast.LENGTH_LONG).show();
        Intent intent2 = new Intent(context, MainActivity.class);
        context.startActivity(intent2);
    }

        <receiver
            android:name=".LaunchReceiver"
            android:enabled="true"
            android:exported="true" >
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED" />
            </intent-filter>
        </receiver>

4.6.5 手機電池當前電量

public void onReceive(Context context, Intent intent) {
        Toast.makeText(context, "電量降低 ", Toast.LENGTH_LONG).show();
    }
        <receiver
            android:name=".BatteryReceiver"
            android:enabled="true"
            android:exported="true" >
            <intent-filter>
                <action android:name="android.intent.action.BATTERY_LOW" >
                </action>
            </intent-filter>
        </receiver>

參考:【Android系統(tǒng)廣播大全】

  1. String ADD_SHORTCUT_ACTION 動作:在系統(tǒng)中添加一個快捷方式。
  2. String ALL_APPS_ACTION 動作:列舉所有可用的應用。輸入:無。
  3. String ALTERNATIVE_CATEGORY 類別:說明 activity 是用戶正在瀏覽的數據的一個可選操作。
  4. String ANSWER_ACTION 動作:處理撥入的電話。
  5. String BATTERY_CHANGED_ACTION 廣播:充電狀態(tài),或者電池的電量發(fā)生變化。
  6. String BOOT_COMPLETED_ACTION 廣播:在系統(tǒng)啟動后,這個動作被廣播一次(只有一次)。
  7. String BROWSABLE_CATEGORY 類別:能夠被瀏覽器安全使用的 activities 必須支持這個類別。
  8. String BUG_REPORT_ACTION 動作:顯示 activity 報告錯誤。
  9. String CALL_ACTION 動作:撥打電話,被呼叫的聯(lián)系人在數據中指定。
  10. String CALL_FORWARDING_STATE_CHANGED_ACTION 廣播:語音電話的呼叫轉移狀態(tài)已經改變。
  11. String CLEAR_CREDENTIALS_ACTION 動作:清除登陸憑證 (credential)。
  12. String CONFIGURATION_CHANGED_ACTION 廣播:設備的配置信息已經改變,參見 Resources.Configuration.
  13. Creator CREATOR 無 無
  14. String DATA_ACTIVITY_STATE_CHANGED_ACTION 廣播:電話的數據活動(data activity)狀態(tài)(即收發(fā)數據的狀態(tài))已經改變。
  15. String DATA_CONNECTION_STATE_CHANGED_ACTION 廣播:電話的數據連接狀態(tài)已經改變。
  16. String DATE_CHANGED_ACTION 廣播:日期被改變。
  17. String DEFAULT_ACTION 動作:和 VIEW_ACTION 相同,是在數據上執(zhí)行的標準動作。
  18. String DEFAULT_CATEGORY 類別:如果 activity 是對數據執(zhí)行確省動作(點擊, center press)的一個選項,需要設置這個類別。
  19. String DELETE_ACTION 動作:從容器中刪除給定的數據。
  20. String DEVELOPMENT_PREFERENCE_CATEGORY 類別:說明 activity 是一個設置面板 (development preference panel).
  21. String DIAL_ACTION 動作:撥打數據中指定的電話號碼。
  22. String EDIT_ACTION 動作:為制定的數據顯示可編輯界面。
  23. String EMBED_CATEGORY 類別:能夠在上級(父)activity 中運行。
  24. String EMERGENCY_DIAL_ACTION 動作:撥打緊急電話號碼。
  25. int FORWARD_RESULT_LAUNCH 啟動標記:如果這個標記被設置,而且被一個已經存在的 activity 用來啟動新的 activity,已有 activity 的回復目標 (reply target) 會被轉移給新的 activity。
  26. String FOTA_CANCEL_ACTION 廣播:取消所有被掛起的 (pending) 更新下載。
  27. String FOTA_INSTALL_ACTION 廣播:更新已經被確認,馬上就要開始安裝。
  28. String FOTA_READY_ACTION 廣播:更新已經被下載,可以開始安裝。
  29. String FOTA_RESTART_ACTION 廣播:恢復已經停止的更新下載。
  30. String FOTA_UPDATE_ACTION 廣播:通過 OTA 下載并安裝操作系統(tǒng)更新。
  31. String FRAMEWORK_INSTRUMENTATION_TEST_CATEGORY 類別:To be used as code under test for framework instrumentation tests.
  32. String GADGET_CATEGORY 類別:這個 activity 可以被嵌入宿主 activity (activity that is hosting gadgets)。
  33. String GET_CONTENT_ACTION 動作:讓用戶選擇數據并返回。
  34. String HOME_CATEGORY 類別:主屏幕 (activity),設備啟動后顯示的第一個 activity。
  35. String INSERT_ACTION 動作:在容器中插入一個空項 (item)。
  36. String INTENT_EXTRA 附加數據:和 PICK_ACTIVITY_ACTION 一起使用時,說明用戶選擇的用來顯示的 activity;和 ADD_SHORTCUT_ACTION 一起使用的時候,描述要添加的快捷方式。
  37. String LABEL_EXTRA 附加數據:大寫字母開頭的字符標簽,和 ADD_SHORTCUT_ACTION 一起使用。
  38. String LAUNCHER_CATEGORY 類別:Activity 應該被顯示在頂級的 launcher 中。
  39. String LOGIN_ACTION 動作:獲取登錄憑證。
  40. String MAIN_ACTION 動作:作為主入口點啟動,不需要數據。
  41. String MEDIABUTTON_ACTION 廣播:用戶按下了“Media Button”。
  42. String MEDIA_BAD_REMOVAL_ACTION 廣播:擴展介質(擴展卡)已經從 SD 卡插槽拔出,但是掛載點 (mount point) 還沒解除 (unmount)。
  43. String MEDIA_EJECT_ACTION 廣播:用戶想要移除擴展介質(拔掉擴展卡)。
  44. String MEDIA_MOUNTED_ACTION 廣播:擴展介質被插入,而且已經被掛載。
  45. String MEDIA_REMOVED_ACTION 廣播:擴展介質被移除。
  46. String MEDIA_SCANNER_FINISHED_ACTION 廣播:已經掃描完介質的一個目錄。
  47. String MEDIA_SCANNER_STARTED_ACTION 廣播:開始掃描介質的一個目錄。
  48. String MEDIA_SHARED_ACTION 廣播:擴展介質的掛載被解除 (unmount),因為它已經作為 USB 大容量存儲被共享。
  49. String MEDIA_UNMOUNTED_ACTION 廣播:擴展介質存在,但是還沒有被掛載 (mount)。
  50. String MESSAGE_WAITING_STATE_CHANGED_ACTION 廣播:電話的消息等待(語音郵件)狀態(tài)已經改變。
  51. int MULTIPLE_TASK_LAUNCH 啟動標記:和 NEW_TASK_LAUNCH 聯(lián)合使用,禁止將已有的任務改變?yōu)榍熬叭蝿?(foreground)。
  52. String NETWORK_TICKLE_RECEIVED_ACTION 廣播:設備收到了新的網絡 "tickle" 通知。
  53. int NEW_TASK_LAUNCH 啟動標記:設置以后,activity 將成為歷史堆棧中的第一個新任務(棧頂)。
  54. int NO_HISTORY_LAUNCH 啟動標記:設置以后,新的 activity 不會被保存在歷史堆棧中。
  55. String PACKAGE_ADDED_ACTION 廣播:設備上新安裝了一個應用程序包。
  56. String PACKAGE_REMOVED_ACTION 廣播:設備上刪除了一個應用程序包。
  57. String PHONE_STATE_CHANGED_ACTION 廣播:電話狀態(tài)已經改變。
  58. String PICK_ACTION 動作:從數據中選擇一個項目 (item),將被選中的項目返回。
  59. String PICK_ACTIVITY_ACTION 動作:選擇一個 activity,返回被選擇的 activity 的類(名)。
  60. String PREFERENCE_CATEGORY 類別:activity是一個設置面板 (preference panel)。
  61. String PROVIDER_CHANGED_ACTION 廣播:更新將要(真正)被安裝。
  62. String PROVISIONING_CHECK_ACTION 廣播:要求 polling of provisioning service 下載最新的設置。
  63. String RUN_ACTION 動作:運行數據(指定的應用),無論它(應用)是什么。
  64. String SAMPLE_CODE_CATEGORY 類別:To be used as an sample code example (not part of the normal user experience).
  65. String SCREEN_OFF_ACTION 廣播:屏幕被關閉。
  66. String SCREEN_ON_ACTION 廣播:屏幕已經被打開。
  67. String SELECTED_ALTERNATIVE_CATEGORY 類別:對于被用戶選中的數據,activity 是它的一個可選操作。
  68. String SENDTO_ACTION 動作:向 data 指定的接收者發(fā)送一個消息。
  69. String SERVICE_STATE_CHANGED_ACTION 廣播:電話服務的狀態(tài)已經改變。
  70. String SETTINGS_ACTION 動作:顯示系統(tǒng)設置。輸入:無。
  71. String SIGNAL_STRENGTH_CHANGED_ACTION 廣播:電話的信號強度已經改變。
  72. int SINGLE_TOP_LAUNCH 啟動標記:設置以后,如果 activity 已經啟動,而且位于歷史堆棧的頂端,將不再啟動(不重新啟動) activity。
  73. String STATISTICS_REPORT_ACTION 廣播:要求 receivers 報告自己的統(tǒng)計信息。
  74. String STATISTICS_STATE_CHANGED_ACTION 廣播:統(tǒng)計信息服務的狀態(tài)已經改變。
  75. String SYNC_ACTION 動作:執(zhí)行數據同步。
  76. String TAB_CATEGORY 類別:這個 activity 應該在 TabActivity 中作為一個 tab 使用。
  77. String TEMPLATE_EXTRA 附加數據:新記錄的初始化模板。
  78. String TEST_CATEGORY 類別:作為測試目的使用,不是正常的用戶體驗的一部分。
  79. String TIMEZONE_CHANGED_ACTION 廣播:時區(qū)已經改變。
  80. String TIME_CHANGED_ACTION 廣播:時間已經改變(重新設置)。
  81. String TIME_TICK_ACTION 廣播:當前時間已經變化(正常的時間流逝)。
  82. String UMS_CONNECTED_ACTION 廣播:設備進入 USB 大容量存儲模式。
  83. String UMS_DISCONNECTED_ACTION 廣播:設備從 USB 大容量存儲模式退出。
  84. String UNIT_TEST_CATEGORY 類別:應該被用作單元測試(通過 test harness 運行)。
  85. String VIEW_ACTION 動作:向用戶顯示數據。
  86. String WALLPAPER_CATEGORY 類別:這個 activity 能過為設備設置墻紙。
  87. String WALLPAPER_CHANGED_ACTION 廣播:系統(tǒng)的墻紙已經改變。
  88. String WALLPAPER_SETTINGS_ACTION 動作:顯示選擇墻紙的設置界面。輸入:無。
  89. String WEB_SEARCH_ACTION 動作:執(zhí)行 web 搜索。
  90. String XMPP_CONNECTED_ACTION 廣播:XMPP 連接已經被建立。
  91. String XMPP_DISCONNECTED_ACTION 廣播:XMPP 連接已經被斷開。
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,197評論 6 531
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,415評論 3 415
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,104評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,884評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,647評論 6 408
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,130評論 1 323
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,208評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,366評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 48,887評論 1 334
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,737評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,939評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,478評論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 44,174評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,586評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,827評論 1 283
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,608評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...

推薦閱讀更多精彩內容