Aktiviti untuk pemula


Pengenalan kepada bahagian ini:

Bahagian ini mula menerangkan Aktiviti (aktiviti), salah satu daripada empat komponen utama Android Pertama, mari kita lihat pengenalan rasmi kepada Aktiviti: PS: Dokumen laman web rasmi: Aktiviti

diperkenalkan seperti berikut: Mengenai makna:

Aktiviti ialah aplikasi Komponen yang menyediakan kawasan pada skrin yang membolehkan pengguna melakukan beberapa operasi interaktif padanya. Seperti membuat panggilan telefon, mengambil foto, menghantar e-mel atau menunjukkan peta! Aktiviti boleh difahami sebagai tetingkap yang melukis antara muka pengguna. Dan tetingkap ini boleh mengisi keseluruhan skrin, atau ia boleh menjadi lebih kecil daripada skrin atau terapung di atas tetingkap lain!

Daripada perenggan di atas, kita boleh mendapatkan maklumat berikut:

1. Aktiviti digunakan untuk memaparkan antara muka pengguna dan pengguna berinteraksi melalui operasi Berkaitan Aktiviti 2. Apl membenarkan berbilang aktiviti

Baiklah, itu sahaja untuk pengenalan umum Jika anda ingin mengetahui lebih lanjut, anda boleh terus membaca API dan mulakan bahagian ini~


  1. Konsep Aktiviti dan gambar rajah kitaran hayat Aktiviti1.jpg

Nota :

1. Premis yang onPause() dan onStop() dipanggil ialah : Satu Aktiviti baharu telah dibuka! Yang pertama ialah apabila Aktiviti lama masih kelihatan;
2. Selain itu, ujian peribadi: AlertDialog dan PopWindow tidak akan mencetuskan dua kaedah panggil balik di atas~


2 Perbezaan antara Activity/ActionBarActivity/AppCompatActivity:

Sebelum saya mula menerangkan cara membuat Aktiviti, mari kita bincangkan tentang perbezaan antara ketiga-tiga ini: Tidak perlu dikatakan, Aktiviti dua yang terakhir dicadangkan untuk keserasian dengan versi yang lebih rendah. ActionBarActivity telah ditinggalkan Seperti yang anda boleh ketahui dari nama, ActionBar~, dan selepas 5.0, ia telah ditinggalkan oleh Google ToolBar... Dan apabila kami mencipta Aktiviti dalam Android Studio, ia akan mewarisi secara lalai: AppCompatActivity! Sudah tentu, anda juga boleh menulis Activity, tetapi AppCompatActivity memberikan kami sesuatu yang baharu! Pilih salah satu daripada dua, Hanya anda suka~


3 Proses penciptaan aktiviti

2.png

PS:

Baiklah, seperti yang dinyatakan di atas, anda boleh mewarisi Activity dan AppCompatActivity, tetapi yang terakhir hanya menyediakan beberapa perkara baharu! Di samping itu, ingat bahawa selagi anda mentakrifkan empat komponen utama dalam Android, sama ada anda menggunakannya atau tidak, anda mesti membandingkannya dalam AndroidManifest.xml Komponen ini mesti diisytiharkan, jika tidak, program akan keluar terus semasa masa jalan dan melaporkan ClassNotFindException...


4 Perbezaan antara satu parameter dan dua parameter onCreate():

Saya percaya bahawa rakan yang menggunakan as akan mendapati bahawa apabila mereka menulis semula kaedah onCreate() Act. , perkara ini mempunyai Dua parameter:

3.png

Tetapi biasanya hanya ada satu parameter:

4.png

Nah, inilah yang 5.0 memberikan Untuk menggunakan kaedah baharu yang kami sediakan, anda mesti menetapkan atribut untuk Aktiviti kami dahulu dalam fail konfigurasi:

android:persistableMode="persistAcrossReboots"

Kemudian Aktiviti kami mempunyai keupayaan untuk berterusan Secara amnya, kami akan menggunakannya dengan dua kaedah lain:

public void onSaveInstanceState(Bundle outState, PersistableBundle outPersistentState)
public void onRestoreInstanceState( Bundle savedsistableBState persistentState)

Saya percaya beberapa rakan sudah biasa dengan nama kedua-dua kaedah ini Kaedah terdahulu akan dipanggil dalam situasi berikut:

  1. Klik butang utama untuk kembali ke laman utama atau. tekan dan tahan untuk memilih Jalankan program lain
  2. Tekan butang kuasa untuk mematikan skrin
  3. Mulakan Aktiviti baharu
  4. Apabila bertukar antara skrin mendatar dan menegak, ia pasti akan dilaksanakan, kerana Akta akan dimusnahkan dahulu apabila bertukar antara skrin mendatar dan menegak , dan kemudian mencipta semula Prinsip penting: Apabila sistem memusnahkan aktiviti anda "tanpa kebenaran anda", onSaveInstanceState akan dipanggil oleh sistem. Ini adalah tanggungjawab sistem, kerana ia mesti memberi anda peluang untuk menyimpan data anda (yang mungkin anda simpan atau tidak).

Kaedah yang terakhir, seperti onCreate, boleh mendapatkan semula data yang disimpan oleh yang pertama: Ia biasanya dilaksanakan antara onStart() dan onResume()! Sebab mengapa terdapat dua cara untuk mendapatkan dan menyimpan data adalah untuk mengelakkan Act jumping tanpa menutup. Kemudian jangan gunakan kaedah onCreate() dan anda mahu mengeluarkan data yang disimpan~

Kembali ke: Kembali ke Aktiviti ini mempunyai keupayaan untuk berterusan, dan PersistableBundle yang ditambahkan parameter membuat kaedah ini Ia mempunyai keupayaan pemulihan data untuk menutup dan memulakan semula sistem! ! Dan ia tidak menjejaskan operasi bersiri kami yang lain, sial, Saya tidak tahu bagaimana ia dilaksanakan secara khusus lagi, mungkin saya menyimpannya dalam fail lain~! Jika saya tahu prinsipnya nanti, saya akan beritahu awak! Selain itu, versi API memerlukan >=21, yang bermaksud bahawa ia mestilah versi 5.0 ke atas untuk sah~


4. Beberapa cara untuk memulakan Aktiviti

Dalam Android kami Anda boleh memulakan Aktiviti baharu dalam dua cara berikut Perhatikan cara ia dimulakan di sini, bukan Mulakan mod! ! Terbahagi kepada permulaan eksplisit dan permulaan tersirat!

1. Permulaan eksplisit: Mulakan dengan nama pakej, ditulis seperti berikut:

①Yang paling biasa:

startActivity(Niat baharu(Akta semasa.ini, Act.class akan dimulakan));
②Nama Komponen melalui Niat:
ComponentName cn = new ComponentName("Nama kelas yang layak sepenuhnya bagi Akta semasa", "Nama kelas yang layak sepenuhnya bagi Akta permulaan");
Intent intent = new Intent();
intent . setComponent(cn) ;
startActivity(intent) ;
Nyatakan nama pakej apabila memulakan Intent:
Intent intent = new Intent( " android.intent.action.MAIN");
intent.setClassName("Nama kelas yang layak sepenuhnya bagi Akta semasa", "Nama kelas yang layak sepenuhnya bagi Akta permulaan");
startActivity(intent) ;

2. Permulaan tersirat: dilaksanakan melalui Tindakan, Kategori atau data penapis Niat Ini dicapai melalui penapis niat Niat**. Bab Niat ini akan menerangkannya secara terperinci! Itu sahaja yang anda perlu tahu di sini!

5.png

3. Terdapat juga cara lain untuk memulakan apk secara terus melalui nama pakej:

Niat niat = getPackageManager() .getLaunchIntentForPackage
("Nama kelas yang layak sepenuhnya bagi Aktiviti pertama yang dilancarkan oleh apk") ;
if(intent != null) startActivity(intent) ;

5 Masalah dengan pensuisan skrin mendatar dan menegak dan penjimatan keadaan

Seperti yang dinyatakan sebelum ini, apabila Apl bertukar antara skrin mendatar dan menegak, Aktiviti semasa akan dimusnahkan dan kemudian semula -dicipta. Anda boleh melakukannya sendiri kitaran hayat Tambah pernyataan untuk mencetak Log masuk setiap kaedah untuk membuat pertimbangan, atau tetapkan butang dan TextView untuk mengubah suai TextView selepas mengklik butang. Teks, dan kemudian bertukar antara skrin mendatar dan menegak, anda akan mendapati bahawa teks TextView berubah kembali kepada kandungan sebelumnya! Apabila bertukar antara skrin mendatar dan menegak, Akta ini melalui kitaran hayat berikut:
onJeda-> onDestory->onStart->onResume
Berkenaan masalah yang mungkin berlaku apabila bertukar antara skrin mendatar dan menegak Pergi ke soalan berikut:


1 Mari kita bincangkan dahulu tentang cara melumpuhkan penukaran automatik antara skrin mendatar dan menegak . . Ia sangat mudah Tambahkan atribut pada Bertindak dalam AndroidManifest.xml :android:screenOrientation, Terdapat nilai pilihan berikut:

  • tidak ditentukan: Nilai lalai ialah sistem menentukan arah paparan Strategi penentuan berkaitan dengan peranti, jadi peranti yang berbeza akan mempunyai berbeza Tunjukkan arah.
  • landskap: Paparan skrin mendatar (lebar lebih panjang daripada ketinggian)
  • potret: Paparan skrin menegak (tinggi lebih panjang daripada lebar)
  • pengguna: Arah pilihan semasa pengguna
  • belakang: Sama seperti arah Aktiviti di bawah Aktiviti ini (dalam tindanan Aktiviti)
  • sensor: Terdapat sensor fizikal untuk membuat keputusan. Jika pengguna memutarkan peranti, skrin akan bertukar antara landskap dan potret.
  • nosensor: Abaikan sensor fizikal supaya ia tidak berubah semasa pengguna memutarkan peranti (kecuali tetapan "tidak ditentukan").

2.Ingin memuatkan reka letak yang berbeza untuk skrin mendatar dan menegak:

1) Sediakan dua set reka letak yang berbeza Android akan melaraskan secara automatik susun atur mengikut skrin mendatar dan menegak Muatkan susun atur yang berbeza: Buat dua folder reka letak: tanah reka letakskrin mendatar, port reka letakskrin menegak Kemudian masukkan dua set fail reka letak ini ke dalam dua folder ini Nama fail adalah sama, dan Android akan menilai dengan sendirinya, dan kemudian memuatkan reka letak yang sepadan!

2) Buat pertimbangan anda sendiri dalam kod dan muatkan apa sahaja yang anda mahu:

Kami biasanya memuatkan fail reka letak dalam kaedah onCreate() Kami boleh melaraskan skrin mendatar dan menegak di sini. Untuk menilai status, kod kunci adalah seperti berikut:

if (this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE){
setContentView(R.layout. skrin mendatar );
}

lain jika (this.getResources().getConfiguration().orientation ==Configuration.ORIENTATION_PORTRAIT) {
setContentView(R.layout.vertical screen);
}

3. Cara menukar simulator antara skrin mendatar dan menegak

Jika simulator anda ialah GM. Hanya tekan butang suis pada simulator Untuk simulator asli, tekan ctrl + f11/f12 untuk menukar!


4. Nyatakan masalah penjimatan:

Seperti yang dinyatakan di atas, ia boleh diselesaikan melalui parameter Bundle savedInstanceState! Tiga kaedah teras:


onCreate(Bundle savedInstanceState);
onSaveInstanceState(Bundle outState);
onRestoreInstanceState(Bundle savedInstanceState);

Anda hanya perlu mengatasi kaedah onSaveInstanceState() dan menulis data ke dalam berkas ini, sebagai contoh:

outState.putInt("num",1);

Dengan cara ini, anda boleh mengeluarkan data yang disimpan di dalamnya dalam onCreate atau onRestoreInstanceState, tetapi anda perlu menyemak sama ada data itu batal sebelum mengambilnya!

savedInstanceState.getInt("num");

Kemudian lakukan apa sahaja yang anda mahu~


6 Aktiviti

Baiklah, akhirnya, saya akan lampirkan beberapa Aktiviti biasa yang disediakan oleh sistem untuk anda!

//1. Buat panggilan
// Hubungi perkhidmatan pelanggan mudah alih 10086
Uri uri = Uri.parse("tel:10086");
Niat niat = Niat baharu(Niat .ACTION_DIAL, uri);
startActivity(niat);

//2 Hantar mesej teks
// Hantar mesej teks dengan kandungan "Hello" ke 10086
Uri uri. = Uri.parse ("smsto:10086");
Niat niat = Niat baharu(Intent.ACTION_SENDTO, uri);
intent.putExtra("sms_body", "Hello");
startActivity(intent );

//3. Hantar MMS (bersamaan dengan menghantar mesej teks dengan lampiran)
Niat niat = Niat baharu(Intent.ACTION_SEND);
intent.putExtra("sms_body", "Hello ");
Uri uri = Uri.parse("content://media/external/images/media/23");
intent.putExtra(Intent.EXTRA_STREAM, uri);
intent.setType ("image/ png");
startActivity(intent);

//4 Buka penyemak imbas:
// Buka laman utama Google
Uri uri = Uri.parse("http. ://www .baidu.com");
Niat niat = Niat baharu(Intent.ACTION_VIEW, uri);
startActivity(niat);

//5. Hantar e-mel: (dibuang Perkhidmatan Google Tidak boleh!!!!)
//Hantar e-mel kepada seseorang@domain.com
Uri uri = Uri.parse("mailto:someone@domain.com");
Niat niat = Niat baharu( Intent.ACTION_SENDTO, uri);
startActivity(intent);
//Hantar e-mel kepada someone@domain.com dengan kandungan "Hello"
Niat niat = Niat baharu(Intent.ACTION_SEND );
intent.putExtra(Intent.EXTRA_EMAIL, "someone@domain.com");
intent.putExtra(Intent.EXTRA_SUBJECT, "Subject");
intent.putExtra(Intent.EXTRA_TEXT, " Hello" );
intent.setType("text/plain");
startActivity(intent);
//Hantar e-mel kepada berbilang orang
Intent intent=new Intent(Intent.ACTION_SEND);
String[] tos = {"1@abc.com", "2@abc.com"}; // Recipient
String[] ccs = {"3@abc.com", "4@abc .com"}; // CC
String[] bccs = {"5@abc.com", "6@abc.com"}; // Bcc
intent.putExtra(Intent.EXTRA_EMAIL, tos) ;
intent.putExtra(Intent.EXTRA_CC, ccs);
intent.putExtra(Intent.EXTRA_BCC, bccs);
intent.putExtra(Intent.EXTRA_SUBJECT, "Subject");
intent. putExtra(Intent.EXTRA_TEXT, "Hello");
intent.setType("message/rfc822");
startActivity(intent);

//6. /Buka Peta Google lokasi Beijing di China (39.9 latitud utara, 116.3 bujur timur)
Uri uri = Uri.parse("geo:39.9,116.3");
Niat niat = Niat baharu(Intent.ACTION_VIEW, uri);
startActivity(niat);

//7 Perancangan laluan
//Perancangan laluan: Dari suatu tempat di Beijing (39.9 latitud utara, longitud timur 116.3) Ke tempat di Shanghai (31.2 latitud utara, 121.4 longitud timur)
Uri uri = Uri.parse("http://maps.google.com/maps?f=d&saddr=39.9 116.3&daddr=31.2 121.4");
Niat niat = Niat baharu(Intent.ACTION_VIEW, uri);
startActivity(niat);

///8. Main balik multimedia:
Niat niat = Niat baharu (Intent.ACTION_VIEW);
Uri uri = Uri.parse("file:///sdcard/foo.mp3");
intent.setDataAndType(uri, "audio/mp3");
startActivity (niat);

//Dapatkan semua fail audio dalam kad SD, dan kemudian mainkan yang pertama =-=
Uri uri = Uri.withAppendedPath(MediaStore.Audio.Media.INTERNAL_CONTENT_URI, " 1");
Niat niat = Niat baharu(Intent.ACTION_VIEW, uri);
startActivity(intent);

//9. Buka kamera untuk mengambil gambar:
// Buka program kamera
Niat niat = Niat baharu( MediaStore.ACTION_IMAGE_CAPTURE); >Bitmap bitmap = (Bitmap) extras.get("data ");

//Satu lagi:
//Memanggil aplikasi kamera sistem dan menyimpan foto yang diambil
Intent intent = new Intent( MediaStore.ACTION_IMAGE_CAPTURE);
masa = Calendar.getInstance().getTimeInMillis();
intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(new File(Environment
.getExternalStorageDirectory().getAbdullah(). +"/tucue", masa + " .jpg")));
startActivityForResult(niat, ACTIVITY_GET_CAMERA_IMAGE);

//10 Dapatkan dan potong gambar itu
// Dapatkan dan potong gambar
Niat niat = Niat baharu (Intent.ACTION_GET_CONTENT);
intent.setType("image/*");
intent.putExtra("crop", "true");
intent.putExtra("aspectX ", 1); // Nisbah aspek potongan ialah 1:2
intent.putExtra("aspectY", 2);
intent.putExtra("outputX" , 20); // Simpan imej Lebar dan tinggi
intent.putExtra("outputY", 40); temp"))); // Simpan Laluan
intent.putExtra("outputFormat", "JPEG");//Return format
startActivityForResult(intent, 0);
//Potong gambar khusus
Niat niat = Niat baharu(" com.android.camera.action.CROP");intent.setClassName("com.android.camera", "com.android.camera.CropImage"); 🎜>intent.putExtra("outputX", 1); // Nisbah aspek keratan ialah 1:2
intent.putExtra("outputY", 2);
intent.putExtra("aspectX", 20); // Simpan lebar dan tinggi imej
intent.putExtra("aspectY", 40);
intent.putExtra("scale", true);
intent.putExtra("noFaceDetection ", benar);
intent.putExtra("output", Uri.parse("file:///mnt/sdcard/temp"));
startActivityForResult(intent, 0);

/ /11. Buka Google Market
// Buka Google Market dan terus masuk ke halaman terperinci program
Uri uri = Uri.parse("market://details?id=" + "com.demo .app") ;
Niat niat = Niat baharu(Intent.ACTION_VIEW, uri);
startActivity(intent);

//12. Masukkan antara muka tetapan telefon mudah alih:
/ /Masukkan antara muka tetapan rangkaian wayarles (Orang lain boleh membuat kesimpulan daripada satu contoh)
Niat niat = Niat baharu(android.provider.Settings.ACTION_WIRELESS_SETTINGS
startActivityForResult(intent, 0);

//13. Pasang apk:
Uri installUri = Uri.fromParts("package", "xxx", null);
returnIt = new Intent(Intent.ACTION_PACKAGE_ADDED, installUri);

/ /14. Nyahpasang apk:
Uri uri = Uri.fromParts("package", strPackageName,
Intent it = new Intent(Intent.ACTION_DELETE, uri); 🎜>
//15. Hantar lampiran :
Intent it = new Intent(Intent.ACTION_SEND);
it.putExtra(Intent.EXTRA_SUBJECT, "The email subject text"); mp3");
sendIntent.setType("audio/mp3");
startActivity(Intent.createChooser(it, "Choose Email Client"));

// 16. Masukkan kenalan halaman:
Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
intent.setData(People.CONTENT_URI);
startActivity(intent); >//17. Lihat kenalan yang dinyatakan:
Uri personUri = ContentUris.withAppendedId(People.CONTENT_URI, info.id);//info.id Contact ID
Intent intent = new Intent ();
intent.setAction(Intent.ACTION_VIEW);
intent.setData(personUri);
startActivity(intent);


Ringkasan bahagian ini:

Baiklah, ia tidak terasa seperti tutorial pengenalan selepas menulisnya, haha, tetapi tidak mengapa untuk mengetahui lebih lanjut. Ini adalah pandangan pertama bahagian ini. Jom~ Kita akan terus mengkaji Aktiviti ini di bahagian seterusnya, seperti pemindahan data, mod permulaan, dll.~ Nantikan~