Sobes.tech
Middle

Ikki ilova o'rtasida ma'lumot uzatish usullarini nomlang.

sobes.tech AI

AIdan javob

  1. Intentlar: Boshqa ilovaning komponentlarini ishga tushirish va Intent.putExtra() orqali ma'lumotlarni uzatish uchun ishlatiladi. Primitiv turlar, String, Parcelable va Serializable obyektlarni uzatishni qo'llab-quvvatlaydi.

    // Ma'lumot yuborish
    val intent = Intent("com.example.ANOTHER_APP_ACTION")
    intent.putExtra("key", "value")
    startActivity(intent)
    
    // Boshqa ilovada (Activityda) ma'lumotlarni qabul qilish
    val data = intent.getStringExtra("key")
    
  2. Content Providerlar: Birgalikda foydalaniladigan ma'lumotlarga tuzilmalangan kirishni ta'minlaydi (masalan, kontaktlar, media). Ilovalar URI orqali ma'lumotlarni so'rash, qo'shish, yangilash va o'chirishlari mumkin. ContentProvider ni amalga oshirish talab qilinadi.

    // Kontakt ma'lumotlarini so'rov qilish misoli (tizim ContentProvider)
    val cursor = contentResolver.query(
        ContactsContract.Contacts.CONTENT_URI,
        null,
        null,
        null,
        null
    )
    // ... kursorni ishlash
    cursor?.close()
    
  3. Binder (AIDL): Android Interfeys Ta'rifi Tili. Ikki jarayon o'rtasida (IPC) o'zaro ta'sir uchun ishlatiladi. Xizmat interfeysini aniqlashga imkon beradi, uni boshqa jarayondan chaqirish mumkin. Murakkab amalga oshirish, yuqori yuklamali yoki ikki tomonlama aloqa uchun mos.

    // AIDL interfeys misoli ( .aidl faylida)
    package com.example.myapp;
    
    interface IRemoteService {
        String getData();
        void setData(String value);
    }
    
    // AIDL asosida yaratilgan binderslar va ulardan foydalanish.
    // AIDL xizmati bilan ishlovchi mijoz misoli
    private var remoteService: IRemoteService? = null
    private val connection = object : ServiceConnection {
        override fun onServiceConnected(className: ComponentName, service: IBinder) {
            remoteService = IRemoteService.Stub.asInterface(service)
            // Endi remoteService metodlarini chaqirish mumkin
        }
    
        override fun onServiceDisconnected(className: ComponentName) {
            remoteService = null
        }
    }
    
  4. Faylni ulashish: Umumiy kataloglar orqali, masalan, tashqi saqlash yoki FileProvider yordamida vaqtinchalik faylga kirishni ta'minlash. O'qish/yozish uchun ruxsatlar talab qilinadi.

    // FileProvider yordamida vaqtinchalik kirishni ta'minlash misoli
    val fileUri = FileProvider.getUriForFile(context, "com.example.myapp.fileprovider", file)
    val intent = Intent(Intent.ACTION_VIEW)
    intent.setDataAndType(fileUri, "image/*")
    intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
    startActivity(intent)
    
  5. Broadcast Receiverlar: Ilovalar keng tarqaladigan xabarlarni yuborishi va olishi mumkin. Ma'lumotlar Intent orqali Broadcast ichida uzatiladi. Boshqa ilovalarni voqealar haqida xabardor qilish uchun mos, ikki tomonlama ma'lumot uzatish uchun emas.

    // Broadcast yuborish
    val intent = Intent("com.example.MY_CUSTOM_ACTION")
    intent.putExtra("data", "some_info")
    sendBroadcast(intent)
    
    // Broadcastni qabul qilish (BroadcastReceiverda)
    class MyReceiver : BroadcastReceiver() {
        override fun onReceive(context: Context, intent: Intent) {
            val data = intent.getStringExtra("data")
            // ...
        }
    }
    
  6. Soketlar: Tarmoq orqali aloqa uchun ishlatiladi, bir qurilma ichida (localhost) yoki tarmoqda. Pastki tarmoq protokollarini amalga oshirishni talab qiladi.

  7. Ulashilgan Preferensiyalar / Ma'lumotlar bazalari (cheklangan): Texnik jihatdan, umumiy katalogda joylashgan umumiy SharedPreferences fayli yoki SQLite ma'lumotlar bazasidan foydalanish mumkin. Biroq, bu ishonchli va xavfsiz usul emas, chunki ruxsatlar va sinxronizatsiyani ehtiyotkorlik bilan boshqarishni talab qiladi va xavfsiz bo'lmasligi mumkin. Odatda, mustaqil ilovalar o'rtasida ma'lumotlarni uzatish uchun tavsiya etilmaydi.