কার মেসেঞ্জার

কার মেসেঞ্জার স্বয়ংচালিত ডিভাইসের জন্য ডিজাইন করা মেসেজিং ক্ষমতা অফার করে। অন্যান্য গাড়ি অ্যাপের মতো, ব্যবহারকারীরা লঞ্চার থেকে কার মেসেঞ্জার চালু করে।

কার মেসেঞ্জারে নতুন কি আছে?

নতুন কার মেসেঞ্জার অ্যাপের সাথে, ড্রাইভার:

  • একটি ডেডিকেটেড মেসেজিং অভিজ্ঞতা পান.
  • লঞ্চার থেকে কার মেসেঞ্জার চালু করুন।
  • ড্রাইভের আগে এবং চলাকালীন প্রাপ্ত বার্তাগুলি ব্রাউজ করুন।
  • বার্তাগুলি শুনুন এবং উত্তর দিন।
  • বার্তা বিজ্ঞপ্তিগুলি নিঃশব্দ করুন।
  • নতুন কথোপকথন শুরু করুন।

পরিভাষা

এই শর্তাবলী এই পৃষ্ঠায় ব্যবহার করা হয়:

ট্যাপ-টু-রিড (TTR)
ট্যাপ-টু-রিড ভয়েস সহকারীকে সেই ব্যবহারকারীর পক্ষ থেকে পাঠ্য বার্তা পড়তে এবং উত্তর দিতে সক্ষম করে, যখন ব্যবহারকারী বার্তা বিজ্ঞপ্তিগুলির সাথে ইন্টারঅ্যাক্ট করে।

সরাসরি উত্তর
ট্যাপ-টু-রিডের মতো, ভয়েস সহকারী ব্যতীত বার্তাটি পড়ে না এবং অবিলম্বে একটি উত্তরের জন্য একটি প্রম্পট জারি করে।

সরাসরি পাঠান
একটি নির্দিষ্ট পরিচিতির সাথে বা ছাড়াই একটি নতুন বার্তা প্রবাহ রচনা করতে একটি ভয়েস সহকারীর সাথে সংহত করে৷

আনবান্ডেড অ্যাপের সুবিধা

আনবান্ডেড অ্যাপ, যেমন কার মেসেঞ্জার, এই সুবিধাগুলি প্রদান করে:

  • শুধুমাত্র পাবলিক পদ্ধতি ব্যবহার করে (লুকানো API তে কোনো প্ল্যাটফর্ম নির্ভরতা নেই)
  • অ্যান্ড্রয়েড প্ল্যাটফর্মের বাইরে অ্যাপস ডেভেলপ করুন
  • আরও ঘন ঘন রিলিজ সক্ষম করুন (নতুন বৈশিষ্ট্য এবং স্থির সমস্যার জন্য)
  • Google Play এর মাধ্যমে অ্যাপ আপডেট করুন

আনবান্ডেড অ্যাপস সম্পর্কে আরও জানুন।

প্রযুক্তিগত বিবরণ

এই বিভাগটি কার মেসেঞ্জার আর্কিটেকচার বর্ণনা করে। আরও জানতে, CarVoiceInteractionSession এর সাথে ইন্টিগ্রেট দেখুন।

টেলিফোনি ভিত্তিক আর্কিটেকচার

ব্লুটুথের মাধ্যমে পেয়ার করা হলে, ফোনের টেলিফোনি ডাটাবেস থেকে গাড়ির টেলিফোনি ডাটাবেসে ডেটা সিঙ্ক্রোনাইজ করা হয়। ব্লুটুথ সংযোগ বিচ্ছিন্ন করার পরে, সিঙ্ক্রোনাইজ করা ডেটা গাড়ির টেলিফোনি ডাটাবেস থেকে মুছে ফেলা হয়।

এই ক্ষমতাটি Android 12-এ চালু করা হয়েছিল। প্রাথমিক সুবিধাগুলির মধ্যে রয়েছে:

  • বাল্ক ব্যবহারকারী বার্তা একটি ডাটাবেস থেকে পুনরুদ্ধার করা যেতে পারে.
  • পূর্ববর্তী ড্রাইভ থেকে বার্তা সমর্থিত.
  • এসএমএস স্টোরেজ এবং অ্যান্ড্রয়েড ফোনে পুনরুদ্ধারের জন্য একই ধরনের আর্কিটেকচার এবং API ব্যবহার করে।
  • অ্যান্ড্রয়েড প্ল্যাটফর্ম থেকে সম্পূর্ণরূপে আনবান্ডেড হয়ে যায়।

এখানে প্রবাহ:

টেলিফোনি-ভিত্তিক ডেটা প্রবাহ চিত্র 1. টেলিফোনি-ভিত্তিক ডেটা প্রবাহ।

পাঠ্য বিন্যাসে চিত্রিত প্রবাহ:

 1. Phone connects to car.
    |
    --> 2. SMS data transferred from phone's database to car database.
          |
          --> 3. Car Messenger retrieves data from telephony database to display on UI.
                  |
                  --> 4. User interactions prompt the voice assistant.
                  |
          <-- 5. Car Messenger receives reply action from the voice assistant.
          |
    <-- 6. SMS is marked as read in car database.
    |
 7. Reply transmitted to recipients, phone database updated with reply and read status.

আমরা ডেটা দিয়ে যা করি তা এখানে:

কার মেসেঞ্জার ডেটা ব্যবহার চিত্র 2. কার মেসেঞ্জার ডেটা হ্যান্ডলিং।

পাঠ্য বিন্যাসে চিত্রিত প্রবাহ:

 1. Phone connects to car.
    |
    --> 2. SMS data transferred from phone's database to car database.
          |
          --> 3. Phone disconnects from car.
                  |
                  --> 4. SMS data deleted from car telephony database.
  • সংযোগে, ব্লুটুথ MAP ব্যবহার করে ফোন থেকে গাড়িতে ডেটা স্থানান্তরিত হয়।
  • সংযোগ বিচ্ছিন্ন হলে, সেই ফোনের ডেটা গাড়ির ডাটাবেস থেকে মুছে ফেলা হয়৷

কার মেসেঞ্জার পান

Google Git থেকে সর্বশেষ কার মেসেঞ্জার কমিট পান।

ভয়েস ইন্টারঅ্যাকশন API

কার মেসেঞ্জার সহকারীর সাথে একীভূত করতে CarVoiceInteractionSession API ব্যবহার করে। এই উপাদানগুলি নিম্নলিখিত বিভাগে বর্ণিত হয়েছে।

PendingIntent মডেল

এই APIগুলি PendingIntent ব্যবহার করে সমাধান করা সহকারী প্রশ্নগুলিকে কার মেসেঞ্জারে ফেরত পাঠায়৷

এটি ঘটনার ক্রম:

  1. activity.showAssist(Bundle args) কল করে কার মেসেঞ্জার সহকারী চালু করে । আরগগুলিতে API অ্যাকশন এবং এর প্রয়োজনীয় প্যারামিটার থাকে, প্রয়োজনে একটি মুলতুবি অভিপ্রায় ধারণ করে।

  2. সহায়ক প্রয়োজনে ব্যবহারকারীর ইনপুট পুনরুদ্ধার করে এবং মুলতুবি থাকা অভিপ্রায়ে প্যাকেজ করে।

  3. সহকারী কার মেসেঞ্জারে অভিপ্রায় ফেরত পাঠায়।

  4. কার মেসেঞ্জার API অ্যাকশনের সমাধান করে

রিড API অ্যাকশন হিসেবে চিহ্নিত করুন

সহকারী যখন একটি বার্তা পড়ছে, তখন বার্তাটিকে পঠিত হিসাবে চিহ্নিত করতে VOICE_ACTION_READ_NOTIFICATION বা VOICE_ACTION_READ_CONVERSATION অ্যাকশন সহ PendingIntent কার মেসেঞ্জারে পাঠানো হয়৷

ডাইরেক্ট রিপ্লাই API অ্যাকশন

যখন সহকারী একটি বার্তার উত্তর দেয়, তখন কথোপকথনের উত্তর দেওয়ার জন্য VOICE_ACTION_REPLY_NOTIFICATION এবং VOICE_ACTION_REPLY_CONVERSATION অ্যাকশন সহ PendingIntent গাড়ি মেসেঞ্জারে পাঠানো হয়৷

ডাইরেক্ট সেন্ড এসএমএস এপিআই অ্যাকশন

VOICE_ACTION_SEND_SMS অ্যাকশন সহ একটি বান্ডিল কার মেসেঞ্জার থেকে সহকারীকে পাঠানো হয়৷

কোডের উদাহরণ:

/**
 *   KEY_PHONE_NUMBER - Recipient’s phone number. If this and the recipients name are not
 *   provided by the application, assistant must do contact disambiguation but is not required
 *   to add the name to the PendingIntent.
 *
 *   KEY_RECIPIENT_NAME - Recipient’s name. If this and the recipient phone number are not
 *   provided by the application, assistant must do contact disambiguation but is not required
 *   to add the name to the PendingIntent.
 *
 *   KEY_RECIPIENT_UID - Recipient’s UID in the ContactProvider database. Optionally provided
 *   by the application. Not required to be sent back by the assistant.
 *
 *   KEY_DEVICE_NAME - Friendly name of the device in which to send the message from. If not
 *   provided by the application, assistant must do device disambiguation but is not required
 *   to add it to PendingIntent. In V1 this is required to be sent by the application.
 *
 *   KEY_DEVICE_ADDRESS - Bluetooth device address of the device in which to send the message
 *   from. If not provided by the application, assistant must do device disambiguation and add
 *   this to the PendingIntent. In V1 this is required to be sent by the application.
 *
 *   KEY_SEND_PENDING_INTENT - @NotNull Will always be provided by the application. The
 *   application must preload the pending intent with any KEYs it provides the assistant that
 *   is also needed to send the message. (I.e if the application passes in the
 *   KEY_PHONE_NUMBER in the Bundle, the assistant can assume the application has already put
 *   this in the PendingIntent and may not re-add it to the PendingIntent).
 *
 */
public static final String KEY_PHONE_NUMBER = “KEY_PHONE_NUMBER”;
public static final String KEY_RECIPIENT_NAME = “KEY_RECIPIENT_NAME”;
public static final String KEY_RECIPIENT_UID = “KEY_RECIPIENT_UID”;
public static final String KEY_DEVICE_NAME = “KEY_DEVICE_NAME”;
public static final String KEY_DEVICE_ADDRESS = “KEY_DEVICE_NAME”;
public static final String KEY_SEND_PENDING_INTENT =”KEY_SEND_PENDING_INTENT”;

এই চিত্রটি একটি বার্তা রচনা দেখায় যখন একজন প্রাপক নির্বাচন করা হয়:

ডায়ালার অ্যাপের পরিচিতি পৃষ্ঠা চিত্র 3. ডায়লার অ্যাপে পরিচিতি পৃষ্ঠা।

নতুন বার্তা ব্যবহার করে কোনো প্রাপক নির্বাচিত না হলে এই চিত্রটি একটি বার্তা রচনা করা দেখায়:

কোনো নির্বাচিত প্রাপক নেই চিত্র 4. মেসেঞ্জার অ্যাপে নতুন বার্তা বোতাম।

ডাইরেক্ট সেন্ড এসএমএস অ্যাকশন ইন্টিগ্রেট করুন

ঐচ্ছিক পরামিতি প্রদান করে VOICE_ACTION_SEND_SMS একত্রিত করার ডায়লারের একটি উদাহরণ এখানে দেওয়া হল:

    /**
     * Build the {@link Bundle} to pass to assistant to send a sms.
     */
    public Bundle buildDirectSendBundle(String number, String name, String uid,
                                        BluetoothDevice device) {
        Bundle bundle = new Bundle();
        bundle.putString(CarVoiceInteractionSession.KEY_ACTION, VOICE_ACTION_SEND_SMS);
        // start optional parameters
        bundle.putString(CarVoiceInteractionSession.KEY_PHONE_NUMBER, number);
        bundle.putString(CarVoiceInteractionSession.KEY_RECIPIENT_NAME, name);
        bundle.putString(CarVoiceInteractionSession.KEY_RECIPIENT_UID, uid);
        // end optional parameters
        bundle.putString(CarVoiceInteractionSession.KEY_DEVICE_ADDRESS, device.getAddress());
        bundle.putString(CarVoiceInteractionSession.KEY_DEVICE_NAME,
                DialerUtils.getDeviceName(mContext, device));
        Intent intent = new Intent(mContext, MessagingService.class)
                .setAction(ACTION_DIRECT_SEND)
                .setClass(mContext, MessagingService.class);

        int requestCode = ACTION_DIRECT_SEND.hashCode();
        PendingIntent pendingIntent = PendingIntent.getForegroundService(
                mContext, requestCode, intent,
                PendingIntent.FLAG_ONE_SHOT | PendingIntent.FLAG_IMMUTABLE);

        bundle.putParcelable(KEY_SEND_PENDING_INTENT, pendingIntent);
        return bundle;
    }

TTR এবং সরাসরি উত্তরের উন্নতি

আপডেট করা এপিআই এখন একটি বহুমুখী Conversation ক্লাস ব্যবহার করে, বিজ্ঞপ্তি রাজ্যের বাইরে ক্রিয়াকলাপের অনুমতি দেয় এবং অ্যাপের প্রেক্ষাপটে ক্ষমতা প্রসারিত করে। এটি StatusBarNotification ক্লাস ব্যবহার করার পূর্বের প্রয়োজনীয়তা প্রতিস্থাপন করে।

ডিবাগ কার মেসেঞ্জার

গাড়ি মেসেঞ্জার ডিবাগ করার বিষয়ে আরও জানতে নিম্নলিখিত বিভাগগুলি দেখুন৷

ব্লুটুথ সংযোগগুলি ডিবাগ করুন

  1. dumpsys কমান্ড চালান:

    adb shell dumpsys bluetooth_manager
    
    • ডাম্পসিস কমান্ড আউটপুটে MapClientService অনুসন্ধান করুন।
     Profile: MapClientService
          mCurrentDevice: 99:99 (Pixel XL) name=Mce state=Connected
    
  2. নিশ্চিত করুন যে সঠিক ডিভাইস তালিকাভুক্ত করা হয়েছে। উদাহরণ স্বরূপ:

    ডিভাইস তালিকা চিত্র 5. ডিভাইস তালিকা।

  3. যদি কোন ডিভাইস পাওয়া না যায়, তাহলে নিম্নলিখিত একটি করুন:

    • ব্লুটুথের সাথে পুনরায় সংযোগ করুন।

    বা

    • ব্লুটুথ সেটিংসে, নিশ্চিত করুন যে টেক্সট মেসেজ চালু আছে।

    বা

    • ফোনে, নিশ্চিত করুন যে বার্তা অ্যাক্সেস দেওয়া হয়েছে।

ব্লুটুথ ডাটাবেস ডিবাগ করুন

কার মেসেঞ্জার টেলিফোনি ডাটাবেসে নির্মিত। ব্লুটুথ সেই ডাটাবেসটি পপুলেট করছে কিনা তা নির্ধারণ করতে, আপনি টেবিলের কমান্ডগুলি ব্যবহার করতে পারেন।

টাস্ক আদেশ
কথোপকথন adb shell content query--uri content://mms-sms/conversations?simple=true
শুধুমাত্র এসএমএস বার্তা adb shell content query--uri content://sms
MMS/SMS বার্তা adb shell content query--uri content://mms-sms/conversations
শুধুমাত্র MMS বার্তা adb shell content query--uri content://mms
শুধুমাত্র MMS ইনবক্স adb shell content query--uri content://mms/conversations/inbox
এসএমএস পাঠানো বার্তা শুধুমাত্র adb shell content query--uri content://sms/sent
এসএমএস ইনবক্স শুধুমাত্র adb shell content query--uri content://sms/conversations/inbox
MMS বার্তা পর্ব 1
(এমএমএসের আইডি দিয়ে 1 প্রতিস্থাপন করুন)
adb shell content query--uri content://mms/part/1

ডিবাগ কার মেসেঞ্জার এবং ভয়েস সহকারী প্রশ্ন

বিল্ড ইমেজ eng বা userdebug হলে লগ ডিফল্টরূপে প্রিন্ট করে। অন্যথায়, কার মেসেঞ্জারের জন্য লগিং সক্ষম করতে:

  1. প্রাসঙ্গিক ট্যাগগুলির জন্য চালান adb shell setprop log.tag.<TAG> DEBUG

  2. প্রিলোড করা সহকারীর জন্য লগিং সক্ষম করুন৷

  3. অত্যন্ত পুনরুত্পাদনযোগ্য বাগগুলির জন্য, Android Studio এর সাথে ব্রেকপয়েন্ট ব্যবহার করার কথা বিবেচনা করুন।