【Android】Activity

一、概念

Activity是一個應(yīng)用程序的組件,他在屏幕上提供了一個區(qū)域,允許用戶在上面做一些交互性的操作, 比如打電話,照相,發(fā)送郵件,或者顯示一個地圖!Activity可以理解成一個繪制用戶界面的窗口, 而這個窗口可以填滿整個屏幕,也可能比屏幕小或者浮動在其他窗口的上方

二、Activity/ActionBarActivity/AppCompatActivity的區(qū)別

ActionBarActivity/AppCompatActivity這兩個都是為了低版本兼容而提出的提出來的,他們都在v7包下, ActionBarActivity已被廢棄,現(xiàn)在用 ToolBar?,F(xiàn)在在Android Studio創(chuàng)建一個Activity默認(rèn)繼承的會是:AppCompatActivity也可以只寫Activity,只是AppCompatActivity給我們提供了一些新的東西

三、Activity的創(chuàng)建流程

四、啟動一個Activity的幾種方式

顯式啟動

startActivity(new Intent(當(dāng)前Act.this,要啟動的Act.class));
ComponentName cn = new ComponentName("當(dāng)前Act的全限定類名","啟動Act的全限定類名") ;
Intent intent = new Intent() ;
intent.setComponent(cn) ;
startActivity(intent) ;
Intent intent = new Intent("android.intent.action.MAIN");
intent.setClassName("當(dāng)前Act的全限定類名","啟動Act的全限定類名");
startActivity(intent);

隱式啟動

<activity 
    android:name=".SecondActivity"
    android:label="第二個Activity">
        <intent-filter>
            <action android:name="sec_action"></action>
            <category android:name="sec_category"></category>
            <category android:name="android.intent.category.DEFAULT"></category>
        </intent-filter>
</activity>
Intent it = new Intent();
it.setAction("sec_action");
it.addCategory("sec_category");
startActivity(it);

直接通過包名啟動apk

Intent intent = getPackageManager().getLaunchIntentForPackage("apk第一個啟動的Activity的全限定類名") ;
if(intent != null) startActivity(intent) ;

五、系統(tǒng)提供的常見的Activity

//撥打電話
// 給移動客服10010撥打電話
Uri uri = Uri.parse("tel:10010");
Intent intent = new Intent(Intent.ACTION_DIAL, uri);
startActivity(intent);
//發(fā)送短信
// 給10010發(fā)送內(nèi)容為“cxll”的短信
Uri uri = Uri.parse("smsto:10010");
Intent intent = new Intent(Intent.ACTION_SENDTO, uri);
intent.putExtra("sms_body", "cxll");
startActivity(intent);
//打開瀏覽器:
Uri uri = Uri.parse("http://www.baidu.com");
Intent intent  = new Intent(Intent.ACTION_VIEW, uri);
startActivity(intent);
//多媒體播放:
Intent intent = new Intent(Intent.ACTION_VIEW);
Uri uri = Uri.parse("file:///sdcard/foo.mp3");
intent.setDataAndType(uri, "audio/mp3");
startActivity(intent);

//獲取SD卡下所有音頻文件,然后播放第一首=-= 
Uri uri = Uri.withAppendedPath(MediaStore.Audio.Media.INTERNAL_CONTENT_URI, "1");
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
startActivity(intent);
//打開攝像頭拍照:
//打開拍照程序
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
startActivityForResult(intent, 0);
//取出照片數(shù)據(jù)
Bundle extras = intent.getExtras(); 
Bitmap bitmap = (Bitmap) extras.get("data");

//另一種:
//調(diào)用系統(tǒng)相機應(yīng)用程序,并存儲拍下來的照片
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
time = Calendar.getInstance().getTimeInMillis();
intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(new File(Environment
.getExternalStorageDirectory().getAbsolutePath()+"/tucue", time + ".jpg")));
startActivityForResult(intent, ACTIVITY_GET_CAMERA_IMAGE);
//獲取并剪切圖片
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("image/*");
intent.putExtra("crop", "true"); // 開啟剪切
intent.putExtra("aspectX", 1); // 剪切的寬高比為1:2
intent.putExtra("aspectY", 2);
intent.putExtra("outputX", 20); // 保存圖片的寬和高
intent.putExtra("outputY", 40); 
intent.putExtra("output", Uri.fromFile(new File("/mnt/sdcard/temp"))); // 保存路徑
intent.putExtra("outputFormat", "JPEG");// 返回格式
startActivityForResult(intent, 0);

//剪切特定圖片
Intent intent = new Intent("com.android.camera.action.CROP"); 
intent.setClassName("com.android.camera", "com.android.camera.CropImage"); 
intent.setData(Uri.fromFile(new File("/mnt/sdcard/temp"))); 
intent.putExtra("outputX", 1); // 剪切的寬高比為1:2
intent.putExtra("outputY", 2);
intent.putExtra("aspectX", 20); // 保存圖片的寬和高
intent.putExtra("aspectY", 40);
intent.putExtra("scale", true);
intent.putExtra("noFaceDetection", true); 
intent.putExtra("output", Uri.parse("file:///mnt/sdcard/temp")); 
startActivityForResult(intent, 0);
//進入手機設(shè)置界面
//進入無線網(wǎng)絡(luò)設(shè)置界面(其它可以舉一反三)  
Intent intent = new Intent(android.provider.Settings.ACTION_WIRELESS_SETTINGS);  
startActivityForResult(intent, 0);
//安裝apk
Uri installUri = Uri.fromParts("package", "xxx", null);   
returnIt = new Intent(Intent.ACTION_PACKAGE_ADDED, installUri);

//卸載apk
Uri uri = Uri.fromParts("package", strPackageName, null);      
Intent it = new Intent(Intent.ACTION_DELETE, uri);      
startActivity(it); 
//進入聯(lián)系人頁面:
Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
intent.setData(People.CONTENT_URI);
startActivity(intent);

//查看指定聯(lián)系人:
Uri personUri = ContentUris.withAppendedId(People.CONTENT_URI, info.id);//info.id聯(lián)系人ID
Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
intent.setData(personUri);
startActivity(intent);

Activity間的數(shù)據(jù)傳遞

正向


反向


Activity的四種加載模式

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,355評論 25 708
  • Activity https://developer.android.com/guide/components/a...
    XLsn0w閱讀 776評論 0 4
  • 你也許再也不會遇到像我這樣的人了, 你也許再也不會看到像我的這樣真誠的文字了, 我是個善于堅守內(nèi)心,珍愛感情的人,...
    小月半子1988閱讀 389評論 1 2
  • 1、感恩今天的雨天,感恩先生在小花4點半起床,體貼我晚上照顧孩子的辛苦,主動瞇著眼也起來帶寶貝。 2、感恩今天天使...
    感恩女神詩淘閱讀 428評論 0 0
  • 對一個完整的“水門事件”的了解,有助于我們了解美國大選的本質(zhì),漸漸從看熱鬧過渡為看門道。 辭職...
    何遠超閱讀 884評論 0 1

友情鏈接更多精彩內(nèi)容