Android 4.0 APIs

API স্তর: 14

Android 4.0 ( ICE_CREAM_SANDWICH ) হল একটি প্রধান প্ল্যাটফর্ম রিলিজ যা ব্যবহারকারী এবং অ্যাপ বিকাশকারীদের জন্য বিভিন্ন ধরনের নতুন বৈশিষ্ট্য যোগ করে৷ নীচে আলোচনা করা সমস্ত নতুন বৈশিষ্ট্য এবং API ছাড়াও, Android 4.0 হল একটি গুরুত্বপূর্ণ প্ল্যাটফর্ম রিলিজ কারণ এটি Android 3.x থেকে ছোট স্ক্রিনে API এবং হলোগ্রাফিক থিমের বিস্তৃত সেট নিয়ে আসে। একজন অ্যাপ ডেভেলপার হিসেবে, আপনার কাছে এখন একটি একক প্ল্যাটফর্ম এবং ইউনিফাইড API ফ্রেমওয়ার্ক রয়েছে যা আপনাকে Android-এর একই সংস্করণ চালানোর সময় হ্যান্ডসেট, ট্যাবলেট এবং আরও অনেক কিছুর জন্য একটি অপ্টিমাইজড ব্যবহারকারীর অভিজ্ঞতা প্রদান করে এমন একটি APK সহ আপনার অ্যাপ্লিকেশন বিকাশ ও প্রকাশ করতে সক্ষম করে— Android 4.0 (API লেভেল 14) বা তার বেশি।

বিকাশকারীদের জন্য, Android 4.0 প্ল্যাটফর্মটি Android SDK-এর জন্য একটি ডাউনলোডযোগ্য উপাদান হিসাবে উপলব্ধ। ডাউনলোডযোগ্য প্ল্যাটফর্মটিতে একটি অ্যান্ড্রয়েড লাইব্রেরি এবং সিস্টেম ইমেজ, সেইসাথে এমুলেটর স্কিন এবং আরও অনেক কিছু রয়েছে। Android 4.0 এর বিরুদ্ধে বিকাশ বা পরীক্ষা শুরু করতে, আপনার SDK-এ প্ল্যাটফর্মটি ডাউনলোড করতে Android SDK ম্যানেজার ব্যবহার করুন৷

API ওভারভিউ

নীচের বিভাগগুলি Android 4.0-এ নতুন APIগুলির একটি প্রযুক্তিগত ওভারভিউ প্রদান করে৷

পরিচিতি প্রদানকারীতে সামাজিক API

ContactsContract প্রদানকারীর দ্বারা সংজ্ঞায়িত পরিচিতি APIগুলিকে নতুন সামাজিক-ভিত্তিক বৈশিষ্ট্যগুলিকে সমর্থন করার জন্য প্রসারিত করা হয়েছে যেমন ডিভাইসের মালিকের জন্য একটি ব্যক্তিগত প্রোফাইল এবং ব্যবহারকারীদের জন্য ডিভাইসে ইনস্টল করা সামাজিক নেটওয়ার্কগুলিতে পৃথক পরিচিতিগুলিকে আমন্ত্রণ জানানোর ক্ষমতা।

ব্যবহারকারীর প্রোফাইল

Android-এ এখন একটি ব্যক্তিগত প্রোফাইল রয়েছে যা ডিভাইসের মালিককে প্রতিনিধিত্ব করে, যা ContactsContract.Profile টেবিল দ্বারা সংজ্ঞায়িত করা হয়েছে। যে সামাজিক অ্যাপগুলি ব্যবহারকারীর পরিচয় বজায় রাখে তারা ContactsContract.Profile এর মধ্যে একটি নতুন ContactsContract.RawContacts এন্ট্রি তৈরি করে ব্যবহারকারীর প্রোফাইল ডেটাতে অবদান রাখতে পারে৷ অর্থাৎ, কাঁচা পরিচিতিগুলি যেগুলি ডিভাইস ব্যবহারকারীকে প্রতিনিধিত্ব করে সেগুলি ContactsContract.RawContacts Uri দ্বারা সংজ্ঞায়িত প্রথাগত কাঁচা পরিচিতি টেবিলের অন্তর্গত নয়; পরিবর্তে, আপনাকে অবশ্যই CONTENT_RAW_CONTACTS_URI এ টেবিলে একটি প্রোফাইল কাঁচা পরিচিতি যোগ করতে হবে। এই টেবিলের কাঁচা পরিচিতিগুলিকে "আমি" লেবেলযুক্ত একক ব্যবহারকারী-দৃশ্যমান প্রোফাইলে একত্রিত করা হয়।

প্রোফাইলের জন্য একটি নতুন পরিচিতি যোগ করার জন্য android.Manifest.permission#WRITE_PROFILE অনুমতি প্রয়োজন৷ একইভাবে, প্রোফাইল টেবিল থেকে পড়ার জন্য, আপনাকে অবশ্যই android.Manifest.permission#READ_PROFILE অনুমতির অনুরোধ করতে হবে। যাইহোক, বেশিরভাগ অ্যাপের ব্যবহারকারীর প্রোফাইল পড়তে হবে না, এমনকি প্রোফাইলে ডেটা অবদান রাখার সময়ও। ব্যবহারকারীর প্রোফাইল পড়া একটি সংবেদনশীল অনুমতি এবং আপনি আশা করা উচিত যে ব্যবহারকারীরা এটির অনুরোধ করে এমন অ্যাপের ব্যাপারে সন্দেহপ্রবণ হবেন।

আমন্ত্রণ অভিপ্রায়

INVITE_CONTACT অভিপ্রায় ক্রিয়া একটি অ্যাপকে এমন একটি ক্রিয়া শুরু করার অনুমতি দেয় যা নির্দেশ করে যে ব্যবহারকারী একটি সামাজিক নেটওয়ার্কে একটি পরিচিতি যোগ করতে চায়৷ অ্যাপটি গ্রহণকারী অ্যাপটি সেই সামাজিক নেটওয়ার্কে নির্দিষ্ট পরিচিতিকে আমন্ত্রণ জানাতে এটি ব্যবহার করে। বেশিরভাগ অ্যাপ এই অপারেশনের রিসিভিং-এন্ডে থাকবে। উদাহরণস্বরূপ, বিল্ট-ইন পিপল অ্যাপটি আমন্ত্রণের অভিপ্রায়কে আহ্বান করে যখন ব্যবহারকারী একটি নির্দিষ্ট সামাজিক অ্যাপের জন্য "সংযোগ যোগ করুন" নির্বাচন করেন যা একজন ব্যক্তির যোগাযোগের বিবরণে তালিকাভুক্ত থাকে।

আপনার অ্যাপটিকে "সংযোগ যোগ করুন" তালিকার মতো দৃশ্যমান করতে, আপনার অ্যাপটিকে আপনার সামাজিক নেটওয়ার্ক থেকে যোগাযোগের তথ্য সিঙ্ক করার জন্য একটি সিঙ্ক অ্যাডাপ্টার প্রদান করতে হবে৷ তারপরে আপনাকে অবশ্যই সিস্টেমকে নির্দেশ করতে হবে যে আপনার অ্যাপটি আপনার অ্যাপের সিঙ্ক কনফিগারেশন ফাইলে inviteContactActivity অ্যাট্রিবিউট যোগ করে INVITE_CONTACT অভিপ্রায়ে সাড়া দেয়, আমন্ত্রণের অভিপ্রায় পাঠানোর সময় সিস্টেমের যে কার্যকলাপটি শুরু করা উচিত তার একটি সম্পূর্ণ-যোগ্য নাম সহ। যে ক্রিয়াকলাপটি শুরু হয় তা তখন অভিপ্রায়ের ডেটা থেকে প্রশ্নযুক্ত পরিচিতির জন্য URI পুনরুদ্ধার করতে পারে এবং সেই পরিচিতিকে নেটওয়ার্কে আমন্ত্রণ জানাতে বা ব্যবহারকারীর সংযোগে ব্যক্তিকে যুক্ত করার জন্য প্রয়োজনীয় কাজ সম্পাদন করতে পারে।

বড় ছবি

অ্যান্ড্রয়েড এখন পরিচিতির জন্য উচ্চ রেজোলিউশন ফটো সমর্থন করে। এখন, যখন আপনি একটি ছবিকে একটি পরিচিতি রেকর্ডে ঠেলে দেন, তখন সিস্টেম এটিকে একটি 96x96 থাম্বনেইল (যেমনটি আগে ছিল) এবং একটি 256x256 "ডিসপ্লে ফটো" উভয়েই প্রক্রিয়া করে যা একটি নতুন ফাইল-ভিত্তিক ফটো স্টোরে সংরক্ষিত থাকে (সঠিক মাত্রা যা সিস্টেম নির্বাচন ভবিষ্যতে পরিবর্তিত হতে পারে)। আপনি একটি ডেটা সারির সাধারণ PHOTO কলামে একটি বড় ফটো রেখে পরিচিতিতে একটি বড় ফটো যোগ করতে পারেন, যা সিস্টেমটি তারপর উপযুক্ত থাম্বনেইলে প্রক্রিয়া করবে এবং ফটো রেকর্ডগুলি প্রদর্শন করবে৷

যোগাযোগ ব্যবহার প্রতিক্রিয়া

নতুন ContactsContract.DataUsageFeedback APIগুলি আপনাকে ব্যবহারকারীদের সাথে যোগাযোগ করার নির্দিষ্ট পদ্ধতিগুলি ব্যবহার করে, যেমন ব্যবহারকারী প্রতিটি ফোন নম্বর বা ই-মেইল ঠিকানা কত ঘন ঘন ব্যবহার করে তা ট্র্যাক করতে সাহায্য করে৷ এই তথ্য প্রতিটি ব্যক্তির সাথে সম্পর্কিত প্রতিটি যোগাযোগ পদ্ধতির জন্য র‌্যাঙ্কিং উন্নত করতে সাহায্য করে এবং প্রতিটি ব্যক্তির সাথে যোগাযোগ করার জন্য আরও ভাল পরামর্শ প্রদান করে।

ক্যালেন্ডার প্রদানকারী

নতুন ক্যালেন্ডার API গুলি আপনাকে ক্যালেন্ডার, ইভেন্ট, অংশগ্রহণকারী, অনুস্মারক এবং সতর্কতাগুলি পড়তে, যোগ করতে, সংশোধন করতে এবং মুছতে দেয় যা ক্যালেন্ডার প্রদানকারীতে সংরক্ষিত থাকে৷

ক্যালেন্ডার ইভেন্টগুলি পড়তে এবং সংশোধন করতে বিভিন্ন অ্যাপ এবং উইজেট এই APIগুলি ব্যবহার করতে পারে৷ যাইহোক, সর্বাধিক বাধ্যতামূলক ব্যবহারের ক্ষেত্রে কিছু হল সিঙ্ক অ্যাডাপ্টার যা ব্যবহারকারীর ক্যালেন্ডারকে অন্যান্য ক্যালেন্ডার পরিষেবা থেকে ক্যালেন্ডার প্রদানকারীর সাথে সিঙ্ক্রোনাইজ করে, যাতে ব্যবহারকারীর সমস্ত ইভেন্টের জন্য একটি ইউনিফাইড অবস্থান অফার করা যায়। Google ক্যালেন্ডার ইভেন্টগুলি, উদাহরণস্বরূপ, Google ক্যালেন্ডার সিঙ্ক অ্যাডাপ্টারের দ্বারা ক্যালেন্ডার প্রদানকারীর সাথে সিঙ্ক্রোনাইজ করা হয়, এই ইভেন্টগুলিকে Android-এর অন্তর্নির্মিত ক্যালেন্ডার অ্যাপের সাথে দেখার অনুমতি দেয়৷

ক্যালেন্ডার প্রদানকারীতে ক্যালেন্ডার এবং ইভেন্ট-সম্পর্কিত তথ্যের ডেটা মডেল CalendarContract দ্বারা সংজ্ঞায়িত করা হয়। সমস্ত ব্যবহারকারীর ক্যালেন্ডার ডেটা CalendarContract বিভিন্ন সাবক্লাস দ্বারা সংজ্ঞায়িত কয়েকটি সারণীতে সংরক্ষণ করা হয়:

  • CalendarContract.Calendars টেবিল ক্যালেন্ডার-নির্দিষ্ট তথ্য ধারণ করে। এই টেবিলের প্রতিটি সারিতে একটি একক ক্যালেন্ডারের বিশদ বিবরণ রয়েছে, যেমন নাম, রঙ, সিঙ্ক তথ্য ইত্যাদি।
  • CalendarContract.Events টেবিলে ইভেন্ট-নির্দিষ্ট তথ্য থাকে। এই টেবিলের প্রতিটি সারিতে একটি ইভেন্টের তথ্য রয়েছে, যেমন ইভেন্টের শিরোনাম, অবস্থান, শুরুর সময়, শেষের সময় ইত্যাদি। ঘটনাটি একবার ঘটতে পারে বা একাধিকবার পুনরাবৃত্তি হতে পারে। অংশগ্রহণকারী, অনুস্মারক এবং বর্ধিত বৈশিষ্ট্য পৃথক টেবিলে সংরক্ষণ করা হয় এবং ইভেন্টের সাথে তাদের লিঙ্ক করতে ইভেন্টের _ID ব্যবহার করে।
  • CalendarContract.Instances টেবিল একটি ইভেন্টের ঘটনার শুরু এবং শেষ সময় ধারণ করে। এই টেবিলের প্রতিটি সারি একটি একক ঘটনার প্রতিনিধিত্ব করে। এক-কালীন ইভেন্টগুলির জন্য ইভেন্টগুলির দৃষ্টান্তগুলির এক-এক-একটি ম্যাপিং রয়েছে৷ পুনরাবৃত্ত ইভেন্টগুলির জন্য, একাধিক সারি স্বয়ংক্রিয়ভাবে সেই ইভেন্টের একাধিক ঘটনার সাথে সামঞ্জস্যপূর্ণভাবে তৈরি হয়।
  • CalendarContract.Attendees টেবিলে ইভেন্টের অংশগ্রহণকারী বা অতিথির তথ্য থাকে। প্রতিটি সারি একটি ইভেন্টের একক অতিথিকে প্রতিনিধিত্ব করে। এটি ব্যক্তিটি কী ধরনের অতিথি এবং ইভেন্টের জন্য ব্যক্তির প্রতিক্রিয়া নির্দিষ্ট করে৷
  • CalendarContract.Reminders টেবিল সতর্কতা/বিজ্ঞপ্তি ডেটা ধারণ করে। প্রতিটি সারি একটি ইভেন্টের জন্য একটি একক সতর্কতা উপস্থাপন করে। একটি ইভেন্ট একাধিক অনুস্মারক থাকতে পারে। প্রতি ইভেন্টে অনুস্মারকের সংখ্যা MAX_REMINDERS এ নির্দিষ্ট করা হয়েছে, যা প্রদত্ত ক্যালেন্ডারের মালিক সিঙ্ক অ্যাডাপ্টার দ্বারা সেট করা হয়েছে৷ অনুস্মারকগুলি ইভেন্টটি নির্ধারিত হওয়ার আগে কয়েক মিনিটের মধ্যে নির্দিষ্ট করা হয় এবং ব্যবহারকারীকে স্মরণ করিয়ে দেওয়ার জন্য একটি সতর্কতা, ইমেল বা SMS ব্যবহার করার মতো একটি অ্যালার্ম পদ্ধতি নির্দিষ্ট করে৷
  • CalendarContract.ExtendedProperties টেবিল সিঙ্ক অ্যাডাপ্টারের দ্বারা ব্যবহৃত অস্বচ্ছ ডেটা ক্ষেত্র ধারণ করে। প্রদানকারী এই সারণীতে থাকা আইটেমগুলির সাথে সম্পর্কিত ইভেন্টগুলি মুছে ফেলা হলে সেগুলিকে মুছে ফেলা ছাড়া কোনও পদক্ষেপ নেয় না৷

ক্যালেন্ডার প্রদানকারীর সাথে ব্যবহারকারীর ক্যালেন্ডার ডেটা অ্যাক্সেস করতে, আপনার অ্যাপ্লিকেশনটিকে অবশ্যই READ_CALENDAR অনুমতি (পঠন অ্যাক্সেসের জন্য) এবং WRITE_CALENDAR (লেখা অ্যাক্সেসের জন্য) অনুরোধ করতে হবে৷

ইভেন্টের উদ্দেশ্য

যদি আপনি যা করতে চান তা হল ব্যবহারকারীর ক্যালেন্ডারে একটি ইভেন্ট যোগ করা, আপনি ক্যালেন্ডার অ্যাপে একটি কার্যকলাপ শুরু করতে Events.CONTENT_URI দ্বারা সংজ্ঞায়িত ডেটা সহ একটি ACTION_INSERT উদ্দেশ্য ব্যবহার করতে পারেন যা নতুন ইভেন্ট তৈরি করে৷ অভিপ্রায় ব্যবহার করার জন্য কোন অনুমতির প্রয়োজন হয় না এবং আপনি নিম্নলিখিত অতিরিক্তগুলির সাথে ইভেন্টের বিবরণ নির্দিষ্ট করতে পারেন:

  • Events.TITLE : ইভেন্টের নাম
  • CalendarContract.EXTRA_EVENT_BEGIN_TIME : ইভেন্ট শুরুর সময় মিলিসেকেন্ডে যুগ থেকে
  • CalendarContract.EXTRA_EVENT_END_TIME : ইভেন্টের সমাপ্তির সময় যুগ থেকে মিলিসেকেন্ডে
  • Events.EVENT_LOCATION : ইভেন্টের অবস্থান
  • Events.DESCRIPTION : ইভেন্টের বিবরণ৷
  • Intent.EXTRA_EMAIL : যাদের আমন্ত্রণ জানানো হবে তাদের ইমেল ঠিকানা৷
  • Events.RRULE : ইভেন্টের পুনরাবৃত্তির নিয়ম
  • Events.ACCESS_LEVEL : ইভেন্টটি ব্যক্তিগত হোক বা সর্বজনীন
  • Events.AVAILABILITY : এই ইভেন্টের সময়কাল একই সময়ে অন্যান্য ইভেন্টের জন্য অনুমতি দেয় কিনা

ভয়েসমেল প্রদানকারী

নতুন ভয়েসমেল প্রদানকারী অ্যাপ্লিকেশনগুলিকে ডিভাইসে ভয়েসমেল যোগ করার অনুমতি দেয়, যাতে ব্যবহারকারীর সমস্ত ভয়েসমেল একটি একক ভিজ্যুয়াল উপস্থাপনায় উপস্থাপন করা যায়৷ উদাহরণস্বরূপ, এটি সম্ভব যে একজন ব্যবহারকারীর একাধিক ভয়েসমেল উত্স রয়েছে, যেমন একটি ফোনের পরিষেবা প্রদানকারী থেকে এবং অন্যটি VoIP বা অন্য বিকল্প ভয়েস পরিষেবাগুলি থেকে৷ এই অ্যাপগুলি ডিভাইসে তাদের ভয়েসমেল যোগ করতে ভয়েসমেল প্রদানকারী API ব্যবহার করতে পারে। অন্তর্নির্মিত ফোন অ্যাপ্লিকেশন তারপর ব্যবহারকারীর কাছে সমস্ত ভয়েসমেলগুলিকে একটি ইউনিফাইড উপস্থাপনায় উপস্থাপন করে৷ যদিও সিস্টেমের ফোন অ্যাপ্লিকেশনটি একমাত্র অ্যাপ্লিকেশন যা সমস্ত ভয়েসমেল পড়তে পারে, প্রতিটি অ্যাপ্লিকেশন যা ভয়েসমেল সরবরাহ করে সেগুলি পড়তে পারে যা এটি সিস্টেমে যুক্ত করেছে (কিন্তু অন্যান্য পরিষেবা থেকে ভয়েসমেল পড়তে পারে না)৷

যেহেতু APIগুলি বর্তমানে তৃতীয় পক্ষের অ্যাপ্লিকেশনগুলিকে সিস্টেম থেকে সমস্ত ভয়েসমেল পড়ার অনুমতি দেয় না, শুধুমাত্র তৃতীয় পক্ষের অ্যাপ্লিকেশনগুলিকে ভয়েসমেল APIগুলি ব্যবহার করা উচিত যেগুলি ব্যবহারকারীকে বিতরণ করার জন্য ভয়েসমেল রয়েছে৷

VoicemailContract ক্লাস ভয়েসমেল প্রদানকারীর জন্য সামগ্রী প্রদানকারীকে সংজ্ঞায়িত করে। সাবক্লাস VoicemailContract.Voicemails এবং VoicemailContract.Status সারণীগুলি প্রদান করে যাতে অ্যাপগুলি ডিভাইসে স্টোরেজের জন্য ভয়েসমেল ডেটা সন্নিবেশ করতে পারে৷ একটি ভয়েসমেল প্রদানকারী অ্যাপের উদাহরণের জন্য, ভয়েসমেল প্রদানকারীর ডেমো দেখুন।

মাল্টিমিডিয়া

Android 4.0 ফটো, ভিডিও এবং সঙ্গীতের মতো মিডিয়ার সাথে ইন্টারঅ্যাক্ট করে এমন অ্যাপ্লিকেশনগুলির জন্য বেশ কয়েকটি নতুন API যোগ করে৷

মিডিয়া প্রভাব

একটি নতুন মিডিয়া ইফেক্ট ফ্রেমওয়ার্ক আপনাকে ছবি এবং ভিডিওতে বিভিন্ন ধরনের ভিজ্যুয়াল এফেক্ট প্রয়োগ করতে দেয়। উদাহরণস্বরূপ, ইমেজ ইফেক্ট আপনাকে রেড-আই ঠিক করতে, একটি ছবিকে গ্রেস্কেলে রূপান্তর করতে, উজ্জ্বলতা সামঞ্জস্য করতে, স্যাচুরেশন সামঞ্জস্য করতে, একটি ছবি ঘোরাতে, ফিশআই ইফেক্ট প্রয়োগ করতে এবং আরও অনেক কিছু করতে দেয়। সিস্টেমটি সর্বাধিক কর্মক্ষমতা পেতে GPU-তে সমস্ত প্রভাব প্রক্রিয়াকরণ করে।

সর্বাধিক কর্মক্ষমতার জন্য, প্রভাবগুলি সরাসরি OpenGL টেক্সচারে প্রয়োগ করা হয়, তাই প্রভাব API ব্যবহার করার আগে আপনার অ্যাপ্লিকেশনের একটি বৈধ OpenGL প্রসঙ্গ থাকতে হবে। আপনি যে টেক্সচারে প্রভাব প্রয়োগ করেন তা বিটম্যাপ, ভিডিও বা এমনকি ক্যামেরা থেকেও হতে পারে। যাইহোক, কিছু নির্দিষ্ট সীমাবদ্ধতা রয়েছে যা টেক্সচারগুলি অবশ্যই পূরণ করতে হবে:

  1. তাদের অবশ্যই একটি GL_TEXTURE_2D টেক্সচার চিত্রের সাথে আবদ্ধ হতে হবে৷
  2. তারা অন্তত একটি mipmap স্তর থাকতে হবে

একটি Effect বস্তু একটি একক মিডিয়া প্রভাবকে সংজ্ঞায়িত করে যা আপনি একটি চিত্র ফ্রেমে প্রয়োগ করতে পারেন। একটি Effect তৈরি করার জন্য মৌলিক কর্মপ্রবাহ হল:

  1. আপনার OpenGL ES 2.0 প্রসঙ্গ থেকে EffectContext.createWithCurrentGlContext() কল করুন।
  2. EffectContext.getFactory() কল করতে প্রত্যাবর্তিত EffectContext ব্যবহার করুন, যা EffectFactory এর একটি উদাহরণ প্রদান করে।
  3. createEffect() কে কল করুন, এটিকে @link android.media.effect.EffectFactory} থেকে একটি প্রভাব নাম দিয়ে, যেমন EFFECT_FISHEYE বা EFFECT_VIGNETTE

আপনি setParameter() কল করে এবং একটি প্যারামিটার নাম এবং পরামিতি মান পাস করে একটি প্রভাবের পরামিতি সামঞ্জস্য করতে পারেন। প্রতিটি ধরনের প্রভাব বিভিন্ন পরামিতি গ্রহণ করে, যা প্রভাবের নামের সাথে নথিভুক্ত করা হয়। উদাহরণস্বরূপ, বিকৃতির scale জন্য EFFECT_FISHEYE একটি প্যারামিটার রয়েছে৷

একটি টেক্সচারের উপর প্রভাব প্রয়োগ করতে, Effect উপর apply() কল করুন এবং ইনপুট টেক্সচারে পাস করুন, এটির প্রস্থ এবং উচ্চতা এবং আউটপুট টেক্সচার। ইনপুট টেক্সচার অবশ্যই একটি GL_TEXTURE_2D টেক্সচার ইমেজের সাথে আবদ্ধ হতে হবে (সাধারণত glTexImage2D() ফাংশন কল করে করা হয়)। আপনি একাধিক mipmap স্তর প্রদান করতে পারেন. যদি আউটপুট টেক্সচারটি একটি টেক্সচার চিত্রের সাথে আবদ্ধ না থাকে, তাহলে এটি স্বয়ংক্রিয়ভাবে একটি GL_TEXTURE_2D এবং একটি মিপম্যাপ স্তর (0) এর প্রভাব দ্বারা আবদ্ধ হবে, যার আকার ইনপুটের মতোই হবে৷

EffectFactory তালিকাভুক্ত সমস্ত প্রভাব সমর্থিত হবে নিশ্চিত করা হয়. যাইহোক, বাহ্যিক লাইব্রেরি থেকে উপলব্ধ কিছু অতিরিক্ত প্রভাব সমস্ত ডিভাইস দ্বারা সমর্থিত নয়, তাই আপনাকে প্রথমে পরীক্ষা করতে হবে যে বহিরাগত লাইব্রেরি থেকে পছন্দসই প্রভাবটি isEffectSupported() কল করে সমর্থিত কিনা।

রিমোট কন্ট্রোল ক্লায়েন্ট

নতুন RemoteControlClient মিডিয়া প্লেয়ারদের রিমোট কন্ট্রোল ক্লায়েন্ট যেমন ডিভাইস লক স্ক্রীন থেকে প্লেব্যাক নিয়ন্ত্রণ সক্ষম করতে দেয়। মিডিয়া প্লেয়াররা রিমোট কন্ট্রোলে প্রদর্শনের জন্য বর্তমানে যে মিডিয়া বাজছে সে সম্পর্কে তথ্যও প্রকাশ করতে পারে, যেমন ট্র্যাক তথ্য এবং অ্যালবাম শিল্প।

আপনার মিডিয়া প্লেয়ারের জন্য রিমোট কন্ট্রোল ক্লায়েন্ট সক্ষম করতে, একটি RemoteControlClient এর কনস্ট্রাক্টরের সাথে ইনস্ট্যান্টিয়েট করুন, এটিকে একটি PendingIntent পাস করুন যা ACTION_MEDIA_BUTTON সম্প্রচার করে। অভিপ্রায়কে অবশ্যই আপনার অ্যাপে স্পষ্ট BroadcastReceiver উপাদানটি ঘোষণা করতে হবে যা ACTION_MEDIA_BUTTON ইভেন্ট পরিচালনা করে।

আপনার প্লেয়ার কোন মিডিয়া কন্ট্রোল ইনপুটগুলি পরিচালনা করতে পারে তা ঘোষণা করতে, আপনাকে অবশ্যই আপনার RemoteControlClientsetTransportControlFlags() কল করতে হবে, FLAG_KEY_MEDIA_* পতাকাগুলির একটি সেট পাস করে, যেমন FLAG_KEY_MEDIA_PREVIOUS এবং FLAG_KEY_MEDIA_NEXT

তারপরে আপনাকে অবশ্যই আপনার RemoteControlClient MediaManager.registerRemoteControlClient() এ পাস করে নিবন্ধন করতে হবে। একবার নিবন্ধিত হয়ে গেলে, রিমোট RemoteControlClient ইনস্ট্যান্ট করার সময় আপনি যে ব্রডকাস্ট রিসিভার ঘোষণা করেছিলেন তা রিমোট কন্ট্রোল থেকে একটি বোতাম টিপলে ACTION_MEDIA_BUTTON ইভেন্টগুলি পাবে৷ আপনি যে অভিপ্রায়টি পান তাতে চাপা মিডিয়া কীটির জন্য KeyEvent অন্তর্ভুক্ত থাকে, যা আপনি getParcelableExtra(Intent.EXTRA_KEY_EVENT) দিয়ে অভিপ্রায় থেকে পুনরুদ্ধার করতে পারেন৷

মিডিয়া প্লে করা সম্পর্কে রিমোট কন্ট্রোলের তথ্য প্রদর্শন করতে, editMetaData() কল করুন এবং ফিরে আসা RemoteControlClient.MetadataEditor এ মেটাডেটা যোগ করুন। আপনি মিডিয়া আর্টওয়ার্কের জন্য একটি বিটম্যাপ সরবরাহ করতে পারেন, সাংখ্যিক তথ্য যেমন অতিবাহিত সময়, এবং পাঠ্য তথ্য যেমন ট্র্যাক শিরোনাম। উপলব্ধ কী সম্পর্কে তথ্যের জন্য MediaMetadataRetrieverMETADATA_KEY_* ফ্ল্যাগগুলি দেখুন।

একটি নমুনা বাস্তবায়নের জন্য, র্যান্ডম মিউজিক প্লেয়ার দেখুন, যা সামঞ্জস্যপূর্ণ যুক্তি প্রদান করে যাতে এটি অ্যান্ড্রয়েড 4.0 ডিভাইসে রিমোট কন্ট্রোল ক্লায়েন্টকে সক্ষম করে যখন ডিভাইসগুলিকে Android 2.1-এ সমর্থন করা অব্যাহত থাকে।

মিডিয়া প্লেয়ার

  • MediaPlayer থেকে অনলাইন মিডিয়া স্ট্রিম করার জন্য এখন INTERNET অনুমতি প্রয়োজন৷ আপনি যদি ইন্টারনেট থেকে সামগ্রী চালানোর জন্য MediaPlayer ব্যবহার করেন, তাহলে আপনার ম্যানিফেস্টে INTERNET অনুমতি যোগ করতে ভুলবেন না অন্যথায় আপনার মিডিয়া প্লেব্যাক Android 4.0 এর সাথে শুরু করে কাজ করবে না৷
  • setSurface() আপনাকে ভিডিও সিঙ্ক হিসাবে আচরণ করার জন্য একটি Surface সংজ্ঞায়িত করতে দেয়।
  • setDataSource() আপনাকে আপনার অনুরোধের সাথে অতিরিক্ত HTTP শিরোনাম পাঠাতে দেয়, যা HTTP(S) লাইভ স্ট্রিমিংয়ের জন্য উপযোগী হতে পারে
  • HTTP(S) লাইভ স্ট্রিমিং এখন অনুরোধ জুড়ে HTTP কুকিজকে সম্মান করে

মিডিয়া প্রকার

Android 4.0 এর জন্য সমর্থন যোগ করে:

  • HTTP/HTTPS লাইভ স্ট্রিমিং প্রোটোকল সংস্করণ 3
  • ADTS কাঁচা AAC অডিও এনকোডিং
  • WEBP ছবি
  • ম্যাট্রোস্কা ভিডিও

আরও তথ্যের জন্য, সমর্থিত মিডিয়া ফর্ম্যাটগুলি দেখুন।

ক্যামেরা

Camera ক্লাসে এখন মুখ শনাক্তকরণ এবং ফোকাস নিয়ন্ত্রণ এবং ক্ষেত্র পরিমাপ করার জন্য API অন্তর্ভুক্ত রয়েছে।

মুখ সনাক্তকরণ

ক্যামেরা অ্যাপগুলি এখন অ্যান্ড্রয়েডের ফেস ডিটেকশন এপিআই-এর সাহায্যে তাদের ক্ষমতা বাড়াতে পারে, যা শুধুমাত্র কোনও বিষয়ের মুখই নয়, চোখ এবং মুখের মতো নির্দিষ্ট মুখের বৈশিষ্ট্যগুলিও সনাক্ত করে৷

আপনার ক্যামেরা অ্যাপ্লিকেশানে মুখগুলি সনাক্ত করতে, আপনাকে অবশ্যই একটি Camera.FaceDetectionListener রেজিস্টার করতে হবে setFaceDetectionListener() এ কল করে। তারপর আপনি আপনার ক্যামেরার সারফেস শুরু করতে পারেন এবং startFaceDetection() এ কল করে মুখ সনাক্ত করা শুরু করতে পারেন।

যখন সিস্টেম ক্যামেরা দৃশ্যে এক বা একাধিক মুখ শনাক্ত করে, তখন এটি Camera.FaceDetectionListener প্রয়োগে onFaceDetection() কলব্যাক কল করে, যার মধ্যে Camera.Face অবজেক্টের একটি অ্যারে রয়েছে৷

Camera.Face ক্লাসের একটি উদাহরণ সনাক্ত করা মুখ সম্পর্কে বিভিন্ন তথ্য প্রদান করে, যার মধ্যে রয়েছে:

  • একটি Rect যা ক্যামেরার বর্তমান দৃশ্যের ক্ষেত্রের সাপেক্ষে মুখের সীমানা নির্দিষ্ট করে৷
  • 1 এবং 100 এর মধ্যে একটি পূর্ণসংখ্যা যা নির্দেশ করে যে সিস্টেমটি কতটা আত্মবিশ্বাসী যে বস্তুটি একটি মানুষের মুখ
  • একটি অনন্য আইডি যাতে আপনি একাধিক মুখ ট্র্যাক করতে পারেন
  • বেশ কয়েকটি Point অবজেক্ট যা নির্দেশ করে যে চোখ এবং মুখ কোথায় অবস্থিত

দ্রষ্টব্য: মুখ শনাক্তকরণ কিছু ডিভাইসে সমর্থিত নাও হতে পারে, তাই আপনার getMaxNumDetectedFaces() কল করে চেক করা উচিত এবং নিশ্চিত করুন যে ফেরতের মান শূন্যের চেয়ে বেশি। এছাড়াও, কিছু ডিভাইস চোখ এবং মুখ সনাক্তকরণ সমর্থন নাও করতে পারে, এই ক্ষেত্রে, Camera.Face সেই ক্ষেত্রগুলি।

ফোকাস এবং পরিমাপ এলাকা

ক্যামেরা অ্যাপ্লিকেশানগুলি এখন সেই ক্ষেত্রগুলিকে নিয়ন্ত্রণ করতে পারে যা ক্যামেরা ফোকাসের জন্য এবং হোয়াইট ব্যালেন্স এবং অটো-এক্সপোজার মিটার করার জন্য ব্যবহার করে। উভয় বৈশিষ্ট্যই ক্যামেরার বর্তমান দৃশ্যের অঞ্চলটি নির্দিষ্ট করতে নতুন Camera.Area ক্লাস ব্যবহার করে যা ফোকাস করা বা মিটার করা উচিত। Camera.Area ক্লাসের একটি দৃষ্টান্ত একটি Rect এবং এলাকার ওজন দিয়ে এলাকার সীমানা নির্ধারণ করে - একটি পূর্ণসংখ্যা সহ বিবেচনায় থাকা অন্যান্য এলাকার তুলনায় সেই এলাকার গুরুত্বের স্তরের প্রতিনিধিত্ব করে।

একটি ফোকাস এলাকা বা মিটারিং এলাকা সেট করার আগে, আপনাকে প্রথমে যথাক্রমে getMaxNumFocusAreas() বা getMaxNumMeteringAreas() কল করতে হবে। যদি এইগুলি শূন্য দেয়, তাহলে ডিভাইসটি সংশ্লিষ্ট বৈশিষ্ট্য সমর্থন করে না।

ব্যবহার করার জন্য ফোকাস বা মিটারিং এলাকাগুলি নির্দিষ্ট করতে, কেবল কল করুন setFocusAreas() বা setMeteringAreas() । প্রত্যেকে Camera.Area একটি List নেয়। এরিয়া অবজেক্ট যা ফোকাস বা মিটারিংয়ের জন্য বিবেচনা করার জন্য এলাকা নির্দেশ করে। উদাহরণস্বরূপ, আপনি এমন একটি বৈশিষ্ট্য বাস্তবায়ন করতে পারেন যা ব্যবহারকারীকে পূর্বরূপের একটি এলাকা স্পর্শ করে ফোকাস এলাকা সেট করতে দেয়, যা আপনি তখন একটি Camera.Area অবজেক্টে অনুবাদ করেন এবং অনুরোধ করেন যে ক্যামেরাটি দৃশ্যের সেই এলাকায় ফোকাস করে। সেই এলাকার ফোকাস বা এক্সপোজার ক্রমাগত আপডেট হবে কারণ এলাকার দৃশ্য পরিবর্তন হবে।

ফটোগুলির জন্য ক্রমাগত স্বয়ংক্রিয় ফোকাস

ছবি তোলার সময় আপনি এখন একটানা অটো ফোকাসিং (CAF) সক্ষম করতে পারেন। আপনার ক্যামেরা অ্যাপে CAF সক্ষম করতে, setFocusMode()FOCUS_MODE_CONTINUOUS_PICTURE পাস করুন। একটি ছবি তোলার জন্য প্রস্তুত হলে, autoFocus() কল করুন৷ আপনার Camera.AutoFocusCallback অবিলম্বে ফোকাস অর্জন করা হয়েছে কিনা তা নির্দেশ করার জন্য একটি কলব্যাক গ্রহণ করে। কলব্যাক পাওয়ার পর CAF পুনরায় চালু করতে, আপনাকে অবশ্যই cancelAutoFocus() কল করতে হবে।

দ্রষ্টব্য: FOCUS_MODE_CONTINUOUS_VIDEO ব্যবহার করে ভিডিও ক্যাপচার করার সময় ক্রমাগত স্বয়ংক্রিয় ফোকাসও সমর্থিত, যা API স্তর 9-এ যোগ করা হয়েছিল৷

অন্যান্য ক্যামেরা বৈশিষ্ট্য

  • ভিডিও রেকর্ড করার সময়, আপনি এখন ভিডিও সেশনে বাধা না দিয়ে একটি ফটো সংরক্ষণ করতে takePicture() কল করতে পারেন। এটি করার আগে, হার্ডওয়্যার এটি সমর্থন করে তা নিশ্চিত করতে আপনার isVideoSnapshotSupported() কল করা উচিত।
  • আপনি এখন এই বৈশিষ্ট্যগুলিকে পরিবর্তন করা থেকে আটকাতে setAutoExposureLock() এবং setAutoWhiteBalanceLock() দিয়ে অটো এক্সপোজার এবং সাদা ব্যালেন্স লক করতে পারেন।
  • ক্যামেরা প্রিভিউ চলাকালীন আপনি এখন setDisplayOrientation() কল করতে পারেন। পূর্বে, আপনি শুধুমাত্র পূর্বরূপ শুরু করার আগে এটিকে কল করতে পারতেন, কিন্তু আপনি এখন যে কোনো সময় অভিযোজন পরিবর্তন করতে পারেন।

ক্যামেরা সম্প্রচারের অভিপ্রায়

  • Camera.ACTION_NEW_PICTURE : এটি নির্দেশ করে যে ব্যবহারকারী একটি নতুন ছবি ধারণ করেছেন৷ অন্তর্নির্মিত ক্যামেরা অ্যাপটি একটি ছবি তোলার পরে এই সম্প্রচারের আহ্বান জানায় এবং তৃতীয় পক্ষের ক্যামেরা অ্যাপগুলিকেও একটি ছবি তোলার পরে এই অভিপ্রায়টি সম্প্রচার করা উচিত৷
  • Camera.ACTION_NEW_VIDEO : এটি নির্দেশ করে যে ব্যবহারকারী একটি নতুন ভিডিও ধারণ করেছেন৷ একটি ভিডিও রেকর্ড করার পরে অন্তর্নির্মিত ক্যামেরা অ্যাপটি এই সম্প্রচারকে আহ্বান করে এবং তৃতীয় পক্ষের ক্যামেরা অ্যাপগুলিকে একটি ভিডিও ক্যাপচার করার পরেও এই অভিপ্রায়টি সম্প্রচার করা উচিত।

অ্যান্ড্রয়েড বিম (এনএফসি সহ এনডিইএফ পুশ)

অ্যান্ড্রয়েড বিম হল একটি নতুন NFC বৈশিষ্ট্য যা আপনাকে এক ডিভাইস থেকে অন্য ডিভাইসে NDEF বার্তা পাঠাতে দেয় (একটি প্রক্রিয়া "NDEF Push" নামেও পরিচিত)। ডেটা স্থানান্তর শুরু হয় যখন অ্যান্ড্রয়েড বিম সমর্থন করে এমন দুটি অ্যান্ড্রয়েড চালিত ডিভাইস কাছাকাছি থাকে। (প্রায় 4 সেমি), সাধারণত এনডিইএফ বার্তার ভিতরের ডেটাতে আপনি ডিভাইসগুলির মধ্যে শেয়ার করতে চান এমন কোনও ডেটা থাকতে পারে, উদাহরণস্বরূপ, পিপল অ্যাপ পরিচিতিগুলি শেয়ার করে, এবং ব্রাউজারগুলি Android বীম ব্যবহার করে শেয়ার করে৷ .

অ্যান্ড্রয়েড বিম ব্যবহার করে ডিভাইসগুলির মধ্যে ডেটা প্রেরণ করতে, আপনাকে একটি NdefMessage তৈরি করতে হবে যাতে আপনার কার্যকলাপ অগ্রভাগে থাকাকালীন আপনি শেয়ার করতে চান এমন তথ্য রয়েছে৷ তারপরে আপনাকে অবশ্যই দুটি উপায়ে সিস্টেমে NdefMessage পাস করতে হবে:

  • অ্যাক্টিভিটি চলাকালীন পুশ করার জন্য একটি একক NdefMessage সংজ্ঞায়িত করুন:

    আপনি যে বার্তাটি পাঠাতে চান সেটি সেট করতে যেকোনো সময় setNdefPushMessage() এ কল করুন। উদাহরণস্বরূপ, আপনি এই পদ্ধতিটিকে কল করতে পারেন এবং আপনার কার্যকলাপের onCreate() পদ্ধতির সময় এটিকে আপনার NdefMessage পাস করতে পারেন। তারপরে, যখনই অ্যানড্রয়েড বিম অন্য ডিভাইসের সাথে সক্রিয় করা হয় যখন কার্যকলাপটি অগ্রভাগে থাকে, সিস্টেমটি অন্য ডিভাইসে NdefMessage পাঠায়।

  • অ্যান্ড্রয়েড বিম শুরু হওয়ার সময়ে পুশ করার জন্য NdefMessage সংজ্ঞায়িত করুন:

    NfcAdapter.CreateNdefMessageCallback প্রয়োগ করুন, যেখানে আপনার createNdefMessage() পদ্ধতির বাস্তবায়ন আপনি যে NdefMessage পাঠাতে চান তা ফেরত দেয়। তারপর NfcAdapter.CreateNdefMessageCallback বাস্তবায়নকে setNdefPushMessageCallback() এ পাস করুন।

    এই ক্ষেত্রে, যখন আপনার অ্যাক্টিভিটি ফোরগ্রাউন্ডে থাকাকালীন Android Beam অন্য ডিভাইসের সাথে সক্রিয় করা হয়, তখন আপনি যে NdefMessage পাঠাতে চান সেটি পুনরুদ্ধার করতে সিস্টেম createNdefMessage() কল করে। এটি আপনাকে NdefMessage শুধুমাত্র একবার Android Beam চালু করার জন্য ডেলিভার করার জন্য সংজ্ঞায়িত করতে দেয়, যদি বার্তার বিষয়বস্তু কার্যকলাপের সারাজীবনে পরিবর্তিত হতে পারে।

সিস্টেম সফলভাবে অন্য ডিভাইসে আপনার NDEF বার্তা পৌঁছে দেওয়ার পরে আপনি যদি কিছু নির্দিষ্ট কোড চালাতে চান, আপনি NfcAdapter.OnNdefPushCompleteCallback প্রয়োগ করতে পারেন এবং setNdefPushCompleteCallback() দিয়ে সেট করতে পারেন। বার্তাটি বিতরণ করা হলে সিস্টেমটি onNdefPushComplete() এ কল করবে।

গ্রহনকারী ডিভাইসে, সিস্টেমটি নিয়মিত NFC ট্যাগের অনুরূপভাবে NDEF পুশ বার্তা প্রেরণ করে। NdefMessage এ প্রথম NdefRecord অনুযায়ী একটি URL বা MIME টাইপ সেট করে একটি কার্যকলাপ শুরু করার জন্য সিস্টেমটি ACTION_NDEF_DISCOVERED অ্যাকশনের সাথে একটি অভিপ্রায় আহ্বান করে। আপনি যে ক্রিয়াকলাপের প্রতিক্রিয়া জানাতে চান তার জন্য, আপনি ইউআরএল বা MIME প্রকারের জন্য অভিপ্রায় ফিল্টার ঘোষণা করতে পারেন যা আপনার অ্যাপের জন্য গুরুত্বপূর্ণ। ট্যাগ ডিসপ্যাচ সম্পর্কে আরও তথ্যের জন্য NFC বিকাশকারী গাইড দেখুন।

আপনি যদি আপনার NdefMessage একটি URI বহন করতে চান, তাহলে আপনি এখন একটি স্ট্রিং বা Uri অবজেক্টের উপর ভিত্তি করে একটি নতুন NdefRecord তৈরি করতে createUri ব্যবহার করতে পারেন। যদি URI একটি বিশেষ বিন্যাস হয় যা আপনি চান যে আপনার অ্যাপ্লিকেশনটি একটি Android Beam ইভেন্টের সময়ও গ্রহণ করুক, তাহলে আগত NDEF বার্তা পাওয়ার জন্য আপনাকে একই URI স্কিম ব্যবহার করে আপনার কার্যকলাপের জন্য একটি অভিপ্রায় ফিল্টার তৈরি করা উচিত।

আপনার অ্যাপ্লিকেশান ইনকামিং এনডিইএফ বার্তা পরিচালনা করে এমন গ্যারান্টি দেওয়ার জন্য আপনার NdefMessage এর সাথে একটি "Android অ্যাপ্লিকেশন রেকর্ড" পাস করা উচিত, এমনকি অন্যান্য অ্যাপ্লিকেশনগুলি একই অভিপ্রায়ের জন্য ফিল্টার করলেও৷ আপনি createApplicationRecord() , এ কল করে একটি Android অ্যাপ্লিকেশন রেকর্ড তৈরি করতে পারেন৷ এটি পাস করা আপনার অ্যাপ্লিকেশনের প্যাকেজ নাম যখন অন্য ডিভাইসটি অ্যাপ্লিকেশন রেকর্ডের সাথে এনডিইএফ বার্তা পায় এবং একাধিক অ্যাপ্লিকেশনে এমন কার্যকলাপ থাকে যা নির্দিষ্ট অভিপ্রায় পরিচালনা করে, তখন সিস্টেমটি সর্বদা আপনার অ্যাপ্লিকেশনের কার্যকলাপে বার্তা প্রদান করে (মেলা অ্যাপ্লিকেশন রেকর্ডের উপর ভিত্তি করে)। যদি লক্ষ্য ডিভাইসে বর্তমানে আপনার অ্যাপ্লিকেশন ইনস্টল করা না থাকে, তাহলে সিস্টেমটি Google Play চালু করতে এবং এটি ইনস্টল করার জন্য ব্যবহারকারীকে অ্যাপ্লিকেশনটিতে নিয়ে যেতে ব্যবহার করে।

যদি আপনার অ্যাপ্লিকেশনটি এনডিইএফ পুশ মেসেজিং সঞ্চালনের জন্য এনএফসি API ব্যবহার না করে, তবে অ্যান্ড্রয়েড একটি ডিফল্ট আচরণ প্রদান করে: যখন আপনার অ্যাপ্লিকেশন একটি ডিভাইসে অগ্রভাগে থাকে এবং অ্যান্ড্রয়েড বিম অন্য অ্যান্ড্রয়েড-চালিত ডিভাইসের সাথে আহ্বান করা হয়, তখন অন্য ডিভাইসটি একটি একটি Android অ্যাপ্লিকেশন রেকর্ড সহ NDEF বার্তা যা আপনার অ্যাপ্লিকেশন সনাক্ত করে। যদি গ্রহনকারী ডিভাইসটিতে অ্যাপ্লিকেশনটি ইনস্টল করা থাকে তবে সিস্টেমটি এটি চালু করে; এটি ইনস্টল করা না থাকলে, Google Play খোলে এবং এটি ইনস্টল করার জন্য ব্যবহারকারীকে আপনার অ্যাপ্লিকেশনে নিয়ে যায়।

আপনি NFC বেসিক ডেভেলপার গাইডে Android Beam এবং অন্যান্য NFC বৈশিষ্ট্য সম্পর্কে আরও পড়তে পারেন। Android Beam ব্যবহার করে কিছু উদাহরণ কোডের জন্য, Android Beam ডেমো দেখুন।

Wi-Fi P2P

অ্যান্ড্রয়েড এখন হটস্পট বা ইন্টারনেট সংযোগ ছাড়াই অ্যান্ড্রয়েড-চালিত ডিভাইস এবং অন্যান্য ডিভাইসের (ওয়াই-ফাই অ্যালায়েন্সের ওয়াই-ফাই ডাইরেক্ট™ সার্টিফিকেশন প্রোগ্রামের সাথে সম্মতিতে) মধ্যে Wi-Fi পিয়ার-টু-পিয়ার (P2P) সংযোগ সমর্থন করে৷ অ্যান্ড্রয়েড ফ্রেমওয়ার্ক Wi-Fi P2P API-এর একটি সেট সরবরাহ করে যা প্রতিটি ডিভাইস যখন Wi-Fi P2P সমর্থন করে তখন আপনাকে অন্য ডিভাইসগুলি আবিষ্কার করতে এবং সংযোগ করতে দেয়, তারপর একটি ব্লুটুথ সংযোগের চেয়ে অনেক বেশি দূরত্ব জুড়ে দ্রুত সংযোগের মাধ্যমে যোগাযোগ করে৷

একটি নতুন প্যাকেজ, android.net.wifi.p2p , Wi-Fi এর সাথে পিয়ার-টু-পিয়ার সংযোগগুলি সম্পাদন করার জন্য সমস্ত API গুলি রয়েছে৷ আপনার যে প্রাথমিক ক্লাসের সাথে কাজ করতে হবে তা হল WifiP2pManager , যা আপনি getSystemService(WIFI_P2P_SERVICE) কল করে অর্জন করতে পারেন। WifiP2pManager এ API গুলি অন্তর্ভুক্ত করে যা আপনাকে করতে দেয়:

  • initialize() কল করে P2P সংযোগের জন্য আপনার আবেদন শুরু করুন
  • discoverPeers() কল করে কাছাকাছি ডিভাইসগুলি খুঁজুন
  • connect()
  • এবং আরো

অন্যান্য বেশ কয়েকটি ইন্টারফেস এবং ক্লাসও প্রয়োজনীয়, যেমন:

  • WifiP2pManager.ActionListener ইন্টারফেস আপনাকে কলব্যাক গ্রহণ করতে দেয় যখন সমবয়সীদের আবিষ্কার করা বা তাদের সাথে সংযোগ স্থাপন সফল বা ব্যর্থ হয়।
  • WifiP2pManager.PeerListListener ইন্টারফেস আপনাকে আবিষ্কৃত সহকর্মীদের সম্পর্কে তথ্য পেতে দেয়। কলব্যাক একটি WifiP2pDeviceList প্রদান করে, যেখান থেকে আপনি পরিসরের মধ্যে প্রতিটি ডিভাইসের জন্য একটি WifiP2pDevice অবজেক্ট পুনরুদ্ধার করতে পারেন এবং ডিভাইসের নাম, ঠিকানা, ডিভাইসের ধরন, ডিভাইসটি সমর্থন করে এমন WPS কনফিগারেশন এবং আরও অনেক কিছুর মতো তথ্য পেতে পারেন।
  • WifiP2pManager.GroupInfoListener ইন্টারফেস আপনাকে একটি P2P গ্রুপ সম্পর্কে তথ্য পেতে দেয়। কলব্যাক একটি WifiP2pGroup অবজেক্ট প্রদান করে, যা গ্রুপের তথ্য যেমন মালিক, নেটওয়ার্কের নাম এবং পাসফ্রেজ প্রদান করে।
  • WifiP2pManager.ConnectionInfoListener ইন্টারফেস আপনাকে বর্তমান সংযোগ সম্পর্কে তথ্য পেতে দেয়। কলব্যাক একটি WifiP2pInfo অবজেক্ট প্রদান করে, যেটিতে একটি গ্রুপ গঠিত হয়েছে কিনা এবং গোষ্ঠীর মালিক কে এমন তথ্য রয়েছে।

Wi-Fi P2P API ব্যবহার করার জন্য, আপনার অ্যাপকে অবশ্যই নিম্নলিখিত ব্যবহারকারীর অনুমতির অনুরোধ করতে হবে:

  • ACCESS_WIFI_STATE
  • CHANGE_WIFI_STATE
  • INTERNET (যদিও আপনার অ্যাপ প্রযুক্তিগতভাবে ইন্টারনেটের সাথে সংযোগ করে না, তবে স্ট্যান্ডার্ড জাভা সকেটের সাথে Wi-Fi P2P পিয়ারদের সাথে যোগাযোগ করার জন্য ইন্টারনেটের অনুমতি প্রয়োজন)।

অ্যান্ড্রয়েড সিস্টেম নির্দিষ্ট Wi-Fi P2P ইভেন্টের সময় বিভিন্ন ক্রিয়া সম্প্রচার করে:

আরও তথ্যের জন্য WifiP2pManager ডকুমেন্টেশন দেখুন। এছাড়াও Wi-Fi P2P ডেমো নমুনা অ্যাপ্লিকেশন দেখুন।

ব্লুটুথ স্বাস্থ্য ডিভাইস

অ্যান্ড্রয়েড এখন ব্লুটুথ স্বাস্থ্য প্রোফাইল ডিভাইসগুলিকে সমর্থন করে, তাই আপনি এমন অ্যাপ্লিকেশন তৈরি করতে পারেন যা ব্লুটুথ সমর্থন করে এমন স্বাস্থ্য ডিভাইসগুলির সাথে যোগাযোগ করতে ব্লুটুথ ব্যবহার করে, যেমন হার্ট-রেট মনিটর, রক্তের মিটার, থার্মোমিটার এবং স্কেল৷

নিয়মিত হেডসেট এবং A2DP প্রোফাইল ডিভাইসের মতো, আপনাকে অবশ্যই একটি BluetoothProfile.ServiceListener সহ getProfileProxy() কল করতে হবে এবং প্রোফাইল প্রক্সি অবজেক্টের সাথে একটি সংযোগ স্থাপন করতে HEALTH প্রোফাইল প্রকার।

একবার আপনি হেলথ প্রোফাইল প্রক্সি ( BluetoothHealth অবজেক্ট) অর্জন করলে, পেয়ার করা হেলথ ডিভাইসের সাথে কানেক্ট করা এবং যোগাযোগ করা নিম্নলিখিত নতুন ব্লুটুথ ক্লাসগুলিকে অন্তর্ভুক্ত করে:

  • BluetoothHealthCallback : অ্যাপ্লিকেশনের নিবন্ধন অবস্থা এবং ব্লুটুথ চ্যানেলের অবস্থার পরিবর্তন সম্পর্কে আপডেট পেতে আপনাকে অবশ্যই এই ক্লাসটি প্রসারিত করতে হবে এবং কলব্যাক পদ্ধতিগুলি প্রয়োগ করতে হবে৷
  • BluetoothHealthAppConfiguration : আপনার BluetoothHealthCallback এ কলব্যাক করার সময়, আপনি এই অবজেক্টের একটি উদাহরণ পাবেন, যা উপলব্ধ ব্লুটুথ স্বাস্থ্য ডিভাইস সম্পর্কে কনফিগারেশন তথ্য প্রদান করে, যা আপনাকে BluetoothHealth APIগুলির সাথে সংযোগ শুরু এবং বন্ধ করার মতো বিভিন্ন ক্রিয়াকলাপ সম্পাদন করতে ব্যবহার করতে হবে৷

ব্লুটুথ হেলথ প্রোফাইল ব্যবহার করার বিষয়ে আরও তথ্যের জন্য, BluetoothHealth ডকুমেন্টেশন দেখুন।

অ্যাক্সেসযোগ্যতা

অ্যান্ড্রয়েড 4.0 দৃষ্টি-প্রতিবন্ধী ব্যবহারকারীদের জন্য নতুন এক্সপ্লোর-বাই-টাচ মোড এবং বর্ধিত APIগুলির মাধ্যমে অ্যাক্সেসযোগ্যতা উন্নত করে যা আপনাকে বিষয়বস্তু দেখার বিষয়ে আরও তথ্য প্রদান করতে বা উন্নত অ্যাক্সেসিবিলিটি পরিষেবাগুলি বিকাশ করতে দেয়৷

এক্সপ্লোর-বাই-টাচ মোড

দৃষ্টিশক্তি হারানো ব্যবহারকারীরা এখন বিষয়বস্তুর ভয়েস বর্ণনা শুনতে স্ক্রীন জুড়ে একটি আঙুল স্পর্শ এবং টেনে স্ক্রীনটি অন্বেষণ করতে পারেন। যেহেতু এক্সপ্লোর-বাই-টাচ মোড একটি ভার্চুয়াল কার্সারের মতো কাজ করে, এটি স্ক্রীন রিডারদের বর্ণনামূলক পাঠ্যটিকে একইভাবে শনাক্ত করতে দেয় যেভাবে স্ক্রীন রিডাররা যখন ডি-প্যাড বা ট্র্যাকবল দিয়ে নেভিগেট করতে পারে — android:contentDescription দ্বারা প্রদত্ত তথ্য পড়ে এবং একটি সিমুলেটেড "হোভার" ইভেন্টে setContentDescription() । সুতরাং, বিবেচনা করুন এটি একটি অনুস্মারক যে আপনার অ্যাপ্লিকেশনের ভিউগুলির জন্য আপনাকে বর্ণনামূলক পাঠ্য সরবরাহ করা উচিত, বিশেষত ImageButton , EditText , ImageView এবং অন্যান্য উইজেটগুলির জন্য যাতে স্বাভাবিকভাবে বর্ণনামূলক পাঠ্য নাও থাকতে পারে৷

দর্শনের জন্য অ্যাক্সেসযোগ্যতা

স্ক্রিন রিডারগুলির মতো অ্যাক্সেসিবিলিটি পরিষেবাগুলিতে উপলব্ধ তথ্যগুলিকে উন্নত করতে, আপনি আপনার কাস্টম View উপাদানগুলিতে অ্যাক্সেসিবিলিটি ইভেন্টগুলির জন্য নতুন কলব্যাক পদ্ধতিগুলি প্রয়োগ করতে পারেন৷

এটি প্রথমে লক্ষ্য করা গুরুত্বপূর্ণ যে Android 4.0 এ sendAccessibilityEvent() পদ্ধতির আচরণ পরিবর্তিত হয়েছে। অ্যান্ড্রয়েডের আগের সংস্করণের মতো, যখন ব্যবহারকারী ডিভাইসে অ্যাক্সেসিবিলিটি পরিষেবাগুলি সক্ষম করে এবং একটি ক্লিক বা হোভারের মতো একটি ইনপুট ইভেন্ট ঘটে, তখন সংশ্লিষ্ট ভিউটি sendAccessibilityEvent() এ একটি কলের মাধ্যমে সূচিত হয়৷ পূর্বে, sendAccessibilityEvent() এর বাস্তবায়ন একটি AccessibilityEvent শুরু করবে এবং এটি AccessibilityManager এ পাঠাবে। নতুন আচরণে কিছু অতিরিক্ত কলব্যাক পদ্ধতি জড়িত যা ভিউ এবং তার পিতামাতাকে ইভেন্টে আরও প্রাসঙ্গিক তথ্য যোগ করার অনুমতি দেয়:

  1. যখন আমন্ত্রণ করা হয়, sendAccessibilityEvent() এবং sendAccessibilityEventUnchecked() পদ্ধতিগুলি onInitializeAccessibilityEvent() এ স্থগিত করে।

    View -এর কাস্টম বাস্তবায়নগুলি AccessibilityEvent এ অতিরিক্ত অ্যাক্সেসিবিলিটি তথ্য সংযুক্ত করতে onInitializeAccessibilityEvent() প্রয়োগ করতে চাইতে পারে, তবে মানক বিষয়বস্তুর বিবরণ, আইটেম সূচী এবং আরও অনেক কিছুর মতো ডিফল্ট তথ্য প্রদানের জন্য সুপার বাস্তবায়নকে কল করা উচিত। যাইহোক, আপনার এই কলব্যাকে অতিরিক্ত টেক্সট কন্টেন্ট যোগ করা উচিত নয়—যা পরবর্তীতে ঘটবে।

  2. একবার সূচনা হলে, যদি ইভেন্টটি একাধিক প্রকারের মধ্যে একটি হয় যা পাঠ্য তথ্য দ্বারা পপুলেট করা উচিত, ভিউটি তখন dispatchPopulateAccessibilityEvent() এর জন্য একটি কল পায়, যা onPopulateAccessibilityEvent() কলব্যাককে স্থগিত করে।

    android:contentDescription পাঠ্য অনুপস্থিত বা অপর্যাপ্ত হলে AccessibilityEvent এ অতিরিক্ত পাঠ্য সামগ্রী যোগ করতে View -এর কাস্টম বাস্তবায়নগুলি সাধারণত onPopulateAccessibilityEvent() প্রয়োগ করা উচিত। AccessibilityEvent আরও পাঠ্য বিবরণ যোগ করতে, getText() কল করুন। add()

  3. এই মুহুর্তে, View ভিউতে requestSendAccessibilityEvent() কল করে ইভেন্টটিকে ভিউ হায়ারার্কিতে উত্তীর্ণ করে। তারপরে প্রতিটি পিতামাতার দৃশ্যে AccessibilityRecord যুক্ত করে অ্যাক্সেসিবিলিটি তথ্য বাড়ানোর সুযোগ রয়েছে, যতক্ষণ না এটি চূড়ান্তভাবে রুট ভিউতে পৌঁছায়, যা ইভেন্টটি AccessibilityManager sendAccessibilityEvent() সহ প্রেরণ করে।

উপরের নতুন পদ্ধতিগুলি ছাড়াও, যা View ক্লাসটি প্রসারিত করার সময় দরকারী, আপনি AccessibilityDelegate প্রসারিত করে এবং setAccessibilityDelegate() দিয়ে View সেট করে এই ইভেন্টের কলব্যাকগুলিকেও বাধা দিতে পারেন। আপনি যখন করেন, ভিউতে প্রতিটি অ্যাক্সেসিবিলিটি পদ্ধতি প্রতিনিধির সাথে সম্পর্কিত পদ্ধতিতে কলকে হ্রাস করে। উদাহরণস্বরূপ, যখন ভিউটি onPopulateAccessibilityEvent() এ একটি কল পায়, তখন এটি View.AccessibilityDelegate একই পদ্ধতিতে এটি পাস করে acc প্রতিনিধি কর্তৃক পরিচালিত না হওয়া যে কোনও পদ্ধতি ডিফল্ট আচরণের জন্য ভিউতে সরাসরি ফিরে দেওয়া হয়। এটি আপনাকে View ক্লাসটি প্রসারিত না করে কেবল প্রদত্ত দর্শনের জন্য প্রয়োজনীয় পদ্ধতিগুলি ওভাররাইড করতে দেয়।

আপনি যদি 4.0 এর আগে অ্যান্ড্রয়েড সংস্করণগুলির সাথে সামঞ্জস্যতা বজায় রাখতে চান, তবে নতুন অ্যাক্সেসিবিলিটি এপিআইগুলিকে সমর্থন করার সময়, আপনি ভি 4 সমর্থন লাইব্রেরির সর্বশেষ সংস্করণ ( সামঞ্জস্যতা প্যাকেজে, আর 4 ) দিয়ে এটি করতে পারেন যা ইউটিলিটি ক্লাসগুলির একটি সেট ব্যবহার করে যা সরবরাহ করে পশ্চাদপদ-সামঞ্জস্যপূর্ণ ডিজাইনে নতুন অ্যাক্সেসিবিলিটি এপিআই।

অ্যাক্সেসিবিলিটি পরিষেবা

আপনি যদি কোনও অ্যাক্সেসিবিলিটি পরিষেবা বিকাশ করছেন তবে ব্যবহারকারীদের জন্য আরও উন্নত অ্যাক্সেসযোগ্যতার প্রতিক্রিয়া সক্ষম করতে বিভিন্ন অ্যাক্সেসিবিলিটি ইভেন্ট সম্পর্কিত তথ্য উল্লেখযোগ্যভাবে প্রসারিত করা হয়েছে। বিশেষত, ইভেন্টগুলি ভিউ রচনাটির ভিত্তিতে তৈরি করা হয়, আরও ভাল প্রসঙ্গের তথ্য সরবরাহ করে এবং অ্যাক্সেসযোগ্যতা পরিষেবাগুলিকে অতিরিক্ত দেখার তথ্য পেতে এবং বিশেষ কেসগুলির সাথে ডিল করার জন্য অ্যাক্সেসযোগ্যতা পরিষেবাগুলিকে ট্র্যাভার্স ভিউ হায়ারার্কিগুলি ট্র্যাভার্স করতে দেয়।

আপনি যদি কোনও অ্যাক্সেসিবিলিটি পরিষেবা বিকাশ করছেন (যেমন স্ক্রিন রিডার), আপনি নিম্নলিখিত পদ্ধতি সহ অতিরিক্ত সামগ্রীর তথ্য এবং ট্র্যাভার্স ভিউ হায়ারার্কিগুলি অ্যাক্সেস করতে পারেন:

  1. কোনও অ্যাপ্লিকেশন থেকে AccessibilityEvent গ্রহণের পরে, নির্দিষ্ট AccessibilityRecord পুনরুদ্ধার করতে AccessibilityEvent.getRecord() কে কল করুন (ইভেন্টের সাথে বেশ কয়েকটি রেকর্ড সংযুক্ত থাকতে পারে)।
  2. AccessibilityEvent বা স্বতন্ত্র AccessibilityRecord থেকে, আপনি AccessibilityNodeInfo অবজেক্টটি পুনরুদ্ধার করতে getSource() কল করতে পারেন।

    একটি AccessibilityNodeInfo উইন্ডো সামগ্রীর একটি একক নোডকে এমন একটি ফর্ম্যাটে উপস্থাপন করে যা আপনাকে সেই নোড সম্পর্কে অ্যাক্সেসযোগ্যতার তথ্য জিজ্ঞাসা করতে দেয়। AccessibilityEvent থেকে ফিরে আসা AccessibilityNodeInfo অবজেক্টটি ইভেন্টের উত্সটি বর্ণনা করে, যেখানে AccessibilityRecord উত্সটি ইভেন্ট উত্সের পূর্বসূরীর বর্ণনা দেয়।

  3. AccessibilityNodeInfo দিয়ে, আপনি এটি সম্পর্কে তথ্য জিজ্ঞাসা করতে পারেন, ভিউ হায়ারার্কি অতিক্রম করতে getParent() বা getChild() কল করতে পারেন এবং এমনকি নোডে শিশু ভিউ যুক্ত করতে পারেন।

আপনার অ্যাপ্লিকেশনটি অ্যাক্সেসযোগ্যতা পরিষেবা হিসাবে সিস্টেমে নিজেকে প্রকাশ করার জন্য, এটি অবশ্যই একটি এক্সএমএল কনফিগারেশন ফাইল ঘোষণা করতে হবে যা AccessibilityServiceInfo সাথে সম্পর্কিত। অ্যাক্সেসিবিলিটি পরিষেবা তৈরির বিষয়ে আরও তথ্যের জন্য, এক্সএমএল কনফিগারেশন সম্পর্কিত তথ্যের জন্য AccessibilityService এবং SERVICE_META_DATA দেখুন।

অন্যান্য অ্যাক্সেসিবিলিটি এপিআই

আপনি যদি ডিভাইসের অ্যাক্সেসিবিলিটি অবস্থায় আগ্রহী হন তবে AccessibilityManager কিছু নতুন এপিআই রয়েছে যেমন:

  • AccessibilityManager.AccessibilityStateChangeListener এমন একটি ইন্টারফেস যা আপনাকে যখনই অ্যাক্সেসযোগ্যতা সক্ষম বা অক্ষম করা থাকে তখন আপনাকে কলব্যাক গ্রহণ করতে দেয়।
  • getEnabledAccessibilityServiceList() কোন অ্যাক্সেসিবিলিটি পরিষেবাগুলি বর্তমানে সক্ষম করা আছে সে সম্পর্কে তথ্য সরবরাহ করে।
  • isTouchExplorationEnabled() আপনাকে জানায় যে এক্সপ্লোর-বাই-টাচ মোড সক্ষম হয়েছে কিনা।

বানান চেকার পরিষেবা

একটি নতুন বানান চেকার ফ্রেমওয়ার্ক অ্যাপ্লিকেশনগুলিকে ইনপুট পদ্ধতি কাঠামোর (আইএমইগুলির জন্য) অনুরূপ উপায়ে বানান চেকার তৈরি করতে দেয়। একটি নতুন বানান পরীক্ষক তৈরি করতে, আপনাকে অবশ্যই একটি পরিষেবা প্রয়োগ করতে হবে যা SpellCheckerService প্রসারিত করে এবং SpellCheckerService.Session ক্লাসটি ইন্টারফেসের কলব্যাক পদ্ধতিগুলির দ্বারা সরবরাহিত পাঠ্যের উপর ভিত্তি করে বানান পরামর্শ সরবরাহ করতে প্রসারিত করে। SpellCheckerService.Session কলব্যাক পদ্ধতিতে আপনাকে অবশ্যই বানান পরামর্শগুলি SuggestionsInfo অবজেক্ট হিসাবে ফিরিয়ে দিতে হবে।

একটি বানান পরীক্ষক পরিষেবা সহ অ্যাপ্লিকেশনগুলি অবশ্যই পরিষেবা দ্বারা প্রয়োজনীয় BIND_TEXT_SERVICE অনুমতি ঘোষণা করতে হবে। পরিষেবাটিতে অবশ্যই <action android:name="android.service.textservice.SpellCheckerService" /> এর অভিপ্রায়টির ক্রিয়া হিসাবে একটি অভিপ্রায় ফিল্টারও ঘোষণা করতে হবে এবং এতে একটি <meta-data> > উপাদান অন্তর্ভুক্ত করা উচিত যা বানান চেকারের জন্য কনফিগারেশন সম্পর্কিত তথ্য ঘোষণা করে।

উদাহরণস্বরূপ কোডের জন্য নমুনা বানান চেকার পরিষেবা অ্যাপ্লিকেশন এবং নমুনা বানান চেকার ক্লায়েন্ট অ্যাপ্লিকেশন দেখুন।

পাঠ্য থেকে স্পিচ ইঞ্জিন

অ্যান্ড্রয়েডের টেক্সট-টু-স্পিচ (টিটিএস) এপিআইগুলি অ্যাপ্লিকেশনগুলিকে আরও সহজেই কাস্টম টিটিএস ইঞ্জিনগুলি প্রয়োগ করার অনুমতি দেওয়ার জন্য উল্লেখযোগ্যভাবে প্রসারিত করা হয়েছে, যখন কোনও টিটিএস ইঞ্জিন ব্যবহার করতে চান এমন অ্যাপ্লিকেশনগুলিতে ইঞ্জিন নির্বাচন করার জন্য কয়েকটি নতুন এপিআই রয়েছে।

পাঠ্য থেকে স্পিচ ইঞ্জিন ব্যবহার করে

অ্যান্ড্রয়েডের পূর্ববর্তী সংস্করণগুলিতে, আপনি সিস্টেম দ্বারা সরবরাহিত টিটিএস ইঞ্জিন ব্যবহার করে পাঠ্য-থেকে-স্পিচ (টিটিএস) অপারেশনগুলি সম্পাদন করতে বা setEngineByPackageName() ব্যবহার করে একটি কাস্টম ইঞ্জিন সেট করতে পাঠ্য-স্পিচ (টিটিএস) অপারেশনগুলি সম্পাদন করতে TextToSpeech ক্লাসটি ব্যবহার করতে পারেন। অ্যান্ড্রয়েড ৪.০ -এ, setEngineByPackageName() পদ্ধতিটি হ্রাস করা হয়েছে এবং আপনি এখন একটি নতুন TextToSpeech কনস্ট্রাক্টর দিয়ে ইঞ্জিনটি নির্দিষ্ট করতে পারেন যা একটি টিটিএস ইঞ্জিনের প্যাকেজের নাম গ্রহণ করে।

আপনি getEngines() সহ উপলভ্য টিটিএস ইঞ্জিনগুলিও জিজ্ঞাসা করতে পারেন। এই পদ্ধতিটি TextToSpeech.EngineInfo অবজেক্টগুলির একটি তালিকা প্রদান করে, যার মধ্যে ইঞ্জিনের আইকন, লেবেল এবং প্যাকেজের নামের মতো মেটা ডেটা অন্তর্ভুক্ত রয়েছে।

টেক্সট-টু-স্পিচ ইঞ্জিনগুলি বিল্ডিং

পূর্বে, কাস্টম ইঞ্জিনগুলির প্রয়োজন ছিল যে ইঞ্জিনটি একটি অনিবন্ধিত নেটিভ শিরোনাম ফাইল ব্যবহার করে নির্মিত হবে। অ্যান্ড্রয়েড ৪.০ -তে, টিটিএস ইঞ্জিনগুলি তৈরির জন্য ফ্রেমওয়ার্ক এপিআইগুলির একটি সম্পূর্ণ সেট রয়েছে।

বেসিক সেটআপটির জন্য TextToSpeechService সার্ভিসের একটি বাস্তবায়ন প্রয়োজন যা INTENT_ACTION_TTS_SERVICE অভিপ্রায়কে সাড়া দেয়। টিটিএস ইঞ্জিনের প্রাথমিক কাজটি TextToSpeechService প্রসারিত করে এমন একটি পরিষেবাতে onSynthesizeText() কলব্যাকের সময় ঘটে। সিস্টেমটি এই পদ্ধতিটি দুটি অবজেক্ট সরবরাহ করে:

  • SynthesisRequest : এতে সিনথেসাইজ করার পাঠ্য, লোকেল, বক্তৃতা হার এবং ভয়েস পিচ সহ বিভিন্ন ডেটা রয়েছে।
  • SynthesisCallback : এটি সেই ইন্টারফেস যার মাধ্যমে আপনার টিটিএস ইঞ্জিন স্ট্রিমিং অডিও হিসাবে ফলাফলের স্পিচ ডেটা সরবরাহ করে। ইঞ্জিনটি অডিওটি সরবরাহ করতে প্রস্তুত তা নির্দেশ করতে প্রথমে ইঞ্জিনকে start() করতে হবে, তারপরে audioAvailable() কল করুন, এটি একটি বাইট বাফারে অডিও ডেটা পাস করে। আপনার ইঞ্জিনটি একবার বাফারের মাধ্যমে সমস্ত অডিও পাস হয়ে গেলে, কল done()

এখন যেহেতু কাঠামোটি টিটিএস ইঞ্জিন তৈরির জন্য সত্যিকারের এপিআই সমর্থন করে, দেশীয় কোড বাস্তবায়নের জন্য সমর্থন সরানো হয়েছে। একটি সামঞ্জস্যতা স্তর সম্পর্কে একটি ব্লগ পোস্টের সন্ধান করুন যা আপনি আপনার পুরানো টিটিএস ইঞ্জিনগুলিকে নতুন কাঠামোয় রূপান্তর করতে ব্যবহার করতে পারেন।

নতুন এপিআই ব্যবহার করে টিটিএস ইঞ্জিন উদাহরণস্বরূপ, স্পিচ ইঞ্জিন নমুনা অ্যাপ্লিকেশনটিতে পাঠ্যটি দেখুন।

নেটওয়ার্ক ব্যবহার

অ্যান্ড্রয়েড 4.0 ব্যবহারকারীদের তাদের অ্যাপ্লিকেশনগুলি কতটা নেটওয়ার্ক ডেটা ব্যবহার করছে তার সুনির্দিষ্ট দৃশ্যমানতা দেয়। সেটিংস অ্যাপ্লিকেশনটি এমন নিয়ন্ত্রণ সরবরাহ করে যা ব্যবহারকারীদের নেটওয়ার্ক ডেটা ব্যবহারের জন্য সেট সীমা পরিচালনা করতে এবং এমনকি পৃথক অ্যাপ্লিকেশনগুলির জন্য ব্যাকগ্রাউন্ড ডেটা ব্যবহার অক্ষম করে। ব্যবহারকারীরা ব্যাকগ্রাউন্ড থেকে ডেটাগুলিতে আপনার অ্যাপ্লিকেশনটির অ্যাক্সেস অক্ষম করে এড়াতে আপনার ডেটা সংযোগটি দক্ষতার সাথে ব্যবহার করার জন্য কৌশলগুলি বিকাশ করা উচিত এবং উপলব্ধ সংযোগের ধরণের উপর নির্ভর করে আপনার ব্যবহার সামঞ্জস্য করা উচিত।

যদি আপনার অ্যাপ্লিকেশনটি প্রচুর নেটওয়ার্ক লেনদেন সম্পাদন করে তবে আপনার ব্যবহারকারী সেটিংস সরবরাহ করা উচিত যা ব্যবহারকারীদের আপনার অ্যাপ্লিকেশনটির ডেটা অভ্যাসগুলি নিয়ন্ত্রণ করতে দেয়, যেমন আপনার অ্যাপ্লিকেশনটি কতবার ডেটা সিঙ্ক করে, কেবল ওয়াই-ফাইতে থাকাকালীন আপলোড/ডাউনলোডগুলি সম্পাদন করবে কিনা, ব্যবহার করবেন কিনা এই নিয়ন্ত্রণগুলি যখন তাদের কাছে উপলভ্য থাকে তখন ডেটাগুলি যখন তাদের কাছে উপলব্ধ থাকে তখন ব্যবহারকারীরা আপনার অ্যাপের ডেটা অ্যাক্সেস অক্ষম করার সম্ভাবনা খুব কম থাকে যখন তারা তাদের সীমাবদ্ধতার কাছে যায়, কারণ তারা পরিবর্তে আপনার অ্যাপ্লিকেশনটি কতটা ডেটা ব্যবহার করে তা সঠিকভাবে নিয়ন্ত্রণ করতে পারে। আপনি যদি এই সেটিংসের সাথে কোনও অগ্রাধিকার ক্রিয়াকলাপ সরবরাহ করেন তবে আপনার ম্যানিফেস্ট ঘোষণায় ACTION_MANAGE_NETWORK_USAGE অ্যাকশনের জন্য একটি অভিপ্রায় ফিল্টার অন্তর্ভুক্ত করা উচিত। যেমন:

<activity android:name="DataPreferences" android:label="@string/title_preferences">
    <intent-filter>
       <action android:name="android.intent.action.MANAGE_NETWORK_USAGE" />
       <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
</activity>

এই অভিপ্রায় ফিল্টারটি সিস্টেমকে নির্দেশ করে যে এটিই সেই ক্রিয়াকলাপ যা আপনার অ্যাপ্লিকেশনটির ডেটা ব্যবহার নিয়ন্ত্রণ করে। সুতরাং, যখন ব্যবহারকারী আপনার অ্যাপ্লিকেশনটি সেটিংস অ্যাপ্লিকেশন থেকে কতটা ডেটা ব্যবহার করছে তা পরিদর্শন করে, তখন একটি "দেখুন অ্যাপ্লিকেশন সেটিংস" বোতামটি উপলব্ধ যা আপনার পছন্দসই ক্রিয়াকলাপটি চালু করে যাতে ব্যবহারকারী আপনার অ্যাপ্লিকেশনটি কতটা ডেটা ব্যবহার করে তা পরিমার্জন করতে পারে।

এছাড়াও সাবধান থাকুন যে getBackgroundDataSetting() getActiveNetworkInfo() অবমূল্যায়িত এবং সর্বদা সত্য ফিরে আসে - পরিবর্তে আপনি কোনও নেটওয়ার্ক লেনদেনের চেষ্টা করার আগে, ডিভাইসের কোনও সংযোগ আছে কিনা তা যাচাই করতে বর্তমান নেটওয়ার্কটি উপস্থাপন করে এবং ক্যোয়ারী isConnected() কে কোয়েরি NetworkInfo পেতে আপনার সর্বদা getActiveNetworkInfo() কল করা উচিত। তারপরে আপনি অন্যান্য সংযোগের বৈশিষ্ট্যগুলি পরীক্ষা করতে পারেন, যেমন ডিভাইসটি ঘোরাঘুরি করছে বা ওয়াই-ফাইয়ের সাথে সংযুক্ত রয়েছে কিনা।

এন্টারপ্রাইজ

অ্যান্ড্রয়েড 4.0 নিম্নলিখিত বৈশিষ্ট্যগুলির সাথে এন্টারপ্রাইজ অ্যাপ্লিকেশনটির জন্য ক্ষমতাগুলি প্রসারিত করে।

ভিপিএন পরিষেবা

নতুন VpnService অ্যাপ্লিকেশনগুলিকে তাদের নিজস্ব ভিপিএন (ভার্চুয়াল প্রাইভেট নেটওয়ার্ক) তৈরি করতে, Service হিসাবে চলমান। একটি ভিপিএন পরিষেবা তার নিজস্ব ঠিকানা এবং রাউটিং বিধিগুলির সাথে ভার্চুয়াল নেটওয়ার্কের জন্য একটি ইন্টারফেস তৈরি করে এবং ফাইল বর্ণনাকারীর সাথে সমস্ত পড়া এবং লেখার সম্পাদন করে।

একটি ভিপিএন পরিষেবা তৈরি করতে, VpnService.Builder ব্যবহার করুন, যা আপনাকে নেটওয়ার্ক ঠিকানা, ডিএনএস সার্ভার, নেটওয়ার্ক রুট এবং আরও অনেক কিছু নির্দিষ্ট করতে দেয়। সম্পূর্ণ হয়ে গেলে, আপনি কলিং establish() দিয়ে ইন্টারফেসটি স্থাপন করতে পারেন, যা কোনও ParcelFileDescriptor দেয়।

যেহেতু একটি ভিপিএন পরিষেবা প্যাকেটগুলিকে বাধা দিতে পারে, সেখানে সুরক্ষা জড়িত রয়েছে। যেমন, আপনি যদি VpnService প্রয়োগ করেন, তবে আপনার পরিষেবাটিতে অবশ্যই BIND_VPN_SERVICE প্রয়োজন যাতে কেবল সিস্টেমটি এটিতে আবদ্ধ হতে পারে তা নিশ্চিত করার জন্য অবশ্যই প্রয়োজন (কেবলমাত্র সিস্টেমটি এই অনুমতি মঞ্জুর করা হয় - অ্যাপ্লিকেশনগুলি এটির জন্য অনুরোধ করতে পারে না)। তারপরে আপনার ভিপিএন পরিষেবাটি ব্যবহার করতে, ব্যবহারকারীদের অবশ্যই এটি সিস্টেম সেটিংসে ম্যানুয়ালি সক্ষম করতে হবে।

ডিভাইস নীতি

ডিভাইস বিধিনিষেধ পরিচালনা করে এমন অ্যাপ্লিকেশনগুলি এখন setCameraDisabled() এবং USES_POLICY_DISABLE_CAMERA সম্পত্তি (নীতি কনফিগারেশন ফাইলে একটি <disable-camera /> উপাদান দিয়ে প্রয়োগ করা) ব্যবহার করে ক্যামেরাটি অক্ষম করতে পারে।

সার্টিফিকেট ব্যবস্থাপনা

নতুন KeyChain শ্রেণি এপিআই সরবরাহ করে যা আপনাকে সিস্টেম কী স্টোরটিতে শংসাপত্রগুলি আমদানি এবং অ্যাক্সেস করতে দেয়। শংসাপত্রগুলি উভয় ক্লায়েন্টের শংসাপত্রের ইনস্টলেশন (ব্যবহারকারীর পরিচয় যাচাই করতে) এবং শংসাপত্র কর্তৃপক্ষের শংসাপত্রগুলি (সার্ভারের পরিচয় যাচাই করতে) প্রবাহিত করে। ওয়েব ব্রাউজার বা ইমেল ক্লায়েন্টদের মতো অ্যাপ্লিকেশনগুলি সার্ভারগুলিতে ব্যবহারকারীদের প্রমাণীকরণ করতে ইনস্টল করা শংসাপত্রগুলি অ্যাক্সেস করতে পারে। আরও তথ্যের জন্য KeyChain ডকুমেন্টেশন দেখুন।

ডিভাইস সেন্সর

অ্যান্ড্রয়েড 4.0 এ দুটি নতুন সেন্সর প্রকার যুক্ত করা হয়েছে:

  • TYPE_AMBIENT_TEMPERATURE : একটি তাপমাত্রা সেন্সর যা ডিগ্রি সেলসিয়াসে পরিবেষ্টিত (ঘর) তাপমাত্রা সরবরাহ করে।
  • TYPE_RELATIVE_HUMIDITY : একটি আর্দ্রতা সেন্সর যা শতাংশ হিসাবে আপেক্ষিক পরিবেষ্টিত (ঘর) আর্দ্রতা সরবরাহ করে।

যদি কোনও ডিভাইসে TYPE_AMBIENT_TEMPERATURE এবং TYPE_RELATIVE_HUMIDITY সেন্সর উভয়ই থাকে তবে আপনি এগুলি শিশির পয়েন্ট এবং পরম আর্দ্রতা গণনা করতে ব্যবহার করতে পারেন।

পূর্ববর্তী তাপমাত্রা সেন্সর, TYPE_TEMPERATURE , হ্রাস করা হয়েছে। পরিবর্তে আপনার TYPE_AMBIENT_TEMPERATURE সেন্সরটি ব্যবহার করা উচিত।

অতিরিক্তভাবে, অ্যান্ড্রয়েডের তিনটি সিন্থেটিক সেন্সর ব্যাপকভাবে উন্নত হয়েছে তাই তাদের এখন কম বিলম্ব এবং মসৃণ আউটপুট রয়েছে। এই সেন্সরগুলিতে মাধ্যাকর্ষণ সেন্সর ( TYPE_GRAVITY ), ঘূর্ণন ভেক্টর সেন্সর ( TYPE_ROTATION_VECTOR ) এবং লিনিয়ার এক্সিলারেশন সেন্সর ( TYPE_LINEAR_ACCELERATION ) অন্তর্ভুক্ত রয়েছে। উন্নত সেন্সরগুলি তাদের আউটপুট উন্নত করতে জাইরোস্কোপ সেন্সরের উপর নির্ভর করে, তাই সেন্সরগুলি কেবল জাইরোস্কোপযুক্ত ডিভাইসে উপস্থিত হয়।

অ্যাকশন বার

বেশ কয়েকটি নতুন আচরণ সমর্থন করার জন্য ActionBar আপডেট করা হয়েছে। সর্বাধিক গুরুত্বপূর্ণ, সমস্ত স্ক্রিন আকারে একটি অনুকূল ব্যবহারকারীর অভিজ্ঞতা সরবরাহ করার জন্য ছোট স্ক্রিনে চলাকালীন সিস্টেমটি অ্যাকশন বারের আকার এবং কনফিগারেশন পরিচালনা করে। উদাহরণস্বরূপ, যখন স্ক্রিনটি সংকীর্ণ হয় (যেমন যখন হ্যান্ডসেটটি প্রতিকৃতি ওরিয়েন্টেশনে থাকে) তখন অ্যাকশন বারের নেভিগেশন ট্যাবগুলি একটি "স্ট্যাকড বারে" প্রদর্শিত হয় যা মূল অ্যাকশন বারের নীচে প্রদর্শিত হয় You আপনি একটিতেও বেছে নিতে পারেন "স্প্লিট অ্যাকশন বার", যা স্ক্রিনটি সংকীর্ণ হলে স্ক্রিনের নীচে পৃথক বারে সমস্ত অ্যাকশন আইটেম রাখে।

স্প্লিট অ্যাকশন বার

যদি আপনার অ্যাকশন বারে বেশ কয়েকটি অ্যাকশন আইটেম অন্তর্ভুক্ত থাকে তবে সেগুলি সমস্ত সংকীর্ণ পর্দার অ্যাকশন বারে ফিট করবে না, তাই সিস্টেমগুলি তাদের আরও বেশি কিছু ওভারফ্লো মেনুতে রাখবে। যাইহোক, অ্যান্ড্রয়েড 4.0 আপনাকে "স্প্লিট অ্যাকশন বার "splitActionBarWhenNarrow" সক্ষম করতে দেয় যাতে আরও অ্যাকশন আইটেমগুলি স্ক্রিনের নীচে পৃথক বারে স্ক্রিনে উপস্থিত হতে পারে android:uiOptions আপনার <application> ট্যাগ বা আপনার ম্যানিফেস্ট ফাইলটিতে <activity> সক্ষম করা হলে, স্ক্রিনটি সংকীর্ণ হওয়ার পরে সিস্টেমটি সমস্ত ক্রিয়া আইটেমের জন্য একটি অতিরিক্ত বার যুক্ত করবে (কোনও ক্রিয়া আইটেম প্রাথমিকটিতে উপস্থিত হবে না। অ্যাকশন বার)।

আপনি যদি ActionBar.Tab এপিআই দ্বারা সরবরাহিত নেভিগেশন ট্যাবগুলি ব্যবহার করতে চান তবে শীর্ষে মূল অ্যাকশন বারের দরকার নেই (আপনি কেবলমাত্র ট্যাবগুলি শীর্ষে উপস্থিত হতে চান), তবে উপরে বর্ণিত হিসাবে স্প্লিট অ্যাকশন বারটি সক্ষম করুন এবং অ্যাকশন বারে অ্যাপ্লিকেশন আইকনটি অক্ষম করতে setDisplayShowHomeEnabled(false) কল করুন। মূল অ্যাকশন বারে কিছুই অবশিষ্ট না রেখে, এটি অদৃশ্য হয়ে যায় - এর মধ্যে সমস্তই শীর্ষে নেভিগেশন ট্যাবগুলি এবং স্ক্রিনের নীচে অ্যাকশন আইটেমগুলি রয়েছে।

অ্যাকশন বার স্টাইল

আপনি যদি অ্যাকশন বারে কাস্টম স্টাইলিং প্রয়োগ করতে চান তবে আপনি যথাক্রমে স্ট্যাকড বার এবং স্প্লিট বারে একটি ব্যাকগ্রাউন্ড অঙ্কনযোগ্য বা রঙ প্রয়োগ করতে backgroundStacked এবং backgroundSplit ব্যবহার করতে পারেন। আপনি এই স্টাইলগুলি setStackedBackgroundDrawable() এবং setSplitBackgroundDrawable() দিয়ে রানটাইমে সেট করতে পারেন।

অ্যাকশন সরবরাহকারী

নতুন ActionProvider শ্রেণি আপনাকে অ্যাকশন আইটেমগুলির জন্য একটি বিশেষায়িত হ্যান্ডলার তৈরি করতে দেয়। কোনও অ্যাকশন সরবরাহকারী একটি অ্যাকশন ভিউ, একটি ডিফল্ট অ্যাকশন আচরণ এবং এটি সম্পর্কিত প্রতিটি অ্যাকশন আইটেমের জন্য একটি সাবমেনু সংজ্ঞায়িত করতে পারে। আপনি যখন এমন একটি অ্যাকশন আইটেম তৈরি করতে চান যার গতিশীল আচরণ রয়েছে (যেমন একটি ভেরিয়েবল অ্যাকশন ভিউ, ডিফল্ট অ্যাকশন বা সাবমেনু), ActionProvider প্রসারিত করা একটি ভাল সমাধান যা বিভিন্ন অ্যাকশন আইটেমের রূপান্তরগুলি পরিচালনা করার পরিবর্তে পুনরায় ব্যবহারযোগ্য উপাদান তৈরি করার জন্য একটি ভাল সমাধান। আপনার খণ্ড বা ক্রিয়াকলাপ।

উদাহরণস্বরূপ, ShareActionProvider ActionProvider একটি এক্সটেনশন যা অ্যাকশন বার থেকে একটি "শেয়ার" অ্যাকশনকে সহজতর করে। traditional তিহ্যবাহী অ্যাকশন আইটেমটি যা ACTION_SEND অভিপ্রায়টি আহ্বান করে, আপনি এই অ্যাকশন সরবরাহকারীকে ড্রপ-ডাউন সহ একটি অ্যাকশন ভিউ উপস্থাপন করতে ব্যবহার করতে পারেন ACTION_SEND অভিপ্রায়টি পরিচালনা করে এমন অ্যাপ্লিকেশনগুলির তালিকা যখন ব্যবহারকারী অ্যাকশনটির জন্য কোনও অ্যাপ্লিকেশন ব্যবহার করে, ShareActionProvider সেই নির্বাচনটি স্মরণ করে এবং সেই অ্যাপ্লিকেশনটির সাথে ভাগ করে নেওয়ার জন্য এটি অ্যাকশন ভিউতে সরবরাহ করে।

কোনও অ্যাকশন আইটেমের জন্য কোনও অ্যাকশন সরবরাহকারী ঘোষণা করতে, অ্যান্ড্রয়েড: আপনার ক্রিয়াকলাপের বিকল্প মেনুতে <item> উপাদানটিতে android:actionProviderClass বৈশিষ্ট্যটি অন্তর্ভুক্ত করুন, মান হিসাবে অ্যাকশন সরবরাহকারীর শ্রেণীর নাম সহ। যেমন:

<item android:id="@+id/menu_share"
      android:title="Share"
      android:showAsAction="ifRoom"
      android:actionProviderClass="android.widget.ShareActionProvider" />

আপনার ক্রিয়াকলাপের onCreateOptionsMenu() কলব্যাক পদ্ধতিতে, মেনু আইটেম থেকে অ্যাকশন সরবরাহকারীর একটি উদাহরণ পুনরুদ্ধার করুন এবং উদ্দেশ্যটি সেট করুন:

কোটলিন

override fun onCreateOptionsMenu(menu: Menu): Boolean {
    menuInflater.inflate(R.menu.options, menu)
    val shareActionProvider = menu.findItem(R.id.menu_share)?.actionProvider as? ShareActionProvider
    // Set the share intent of the share action provider.
    shareActionProvider?.setShareIntent(createShareIntent())
    ...
    return super.onCreateOptionsMenu(menu)
}

জাভা

public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.options, menu);
    ShareActionProvider shareActionProvider =
          (ShareActionProvider) menu.findItem(R.id.menu_share).getActionProvider();
    // Set the share intent of the share action provider.
    shareActionProvider.setShareIntent(createShareIntent());
    ...
    return super.onCreateOptionsMenu(menu);
}

ShareActionProvider ব্যবহার করে উদাহরণের জন্য, এপিডেমোসে অ্যাকশন বারশারঅ্যাকশনপ্রোভাইডারঅ্যাক্টিভিটি দেখুন।

সঙ্কুচিত অ্যাকশন ভিউ

অ্যাকশন ভিউ সরবরাহকারী অ্যাকশন আইটেমগুলি এখন তাদের অ্যাকশন ভিউ স্টেট এবং traditional তিহ্যবাহী অ্যাকশন আইটেমের অবস্থার মধ্যে টগল করতে পারে। পূর্বে কেবল SearchView যখন অ্যাকশন ভিউ হিসাবে ব্যবহৃত হয় তখন ভেঙে ফেলা সমর্থন করে তবে এখন আপনি যে কোনও অ্যাকশন আইটেমের জন্য একটি অ্যাকশন ভিউ যুক্ত করতে পারেন এবং প্রসারিত রাষ্ট্রের মধ্যে স্যুইচ করতে পারেন (অ্যাকশন ভিউ দৃশ্যমান) এবং ধসে পড়া রাষ্ট্র (অ্যাকশন আইটেমটি দৃশ্যমান)।

অ্যাকশন ভিউ রয়েছে এমন কোনও অ্যাকশন আইটেমটি সংযোগযোগ্য হতে পারে তা ঘোষণা করার জন্য, অ্যান্ড্রয়েডে “collapseActionView" পতাকা অন্তর্ভুক্ত করুন android:showAsAction মেনুর এক্সএমএল ফাইলের <item> উপাদানটির জন্য শো -প্যাসাকশন বৈশিষ্ট্য।

যখন কোনও অ্যাকশন ভিউ প্রসারিত এবং ধসের মধ্যে স্যুইচ করে তখন কলব্যাকগুলি গ্রহণ করতে, MenuItem.OnActionExpandListener setOnActionExpandListener() কল করে সংশ্লিষ্ট MenuItem সাথে একটি উদাহরণ নিবন্ধন করুন। সাধারণত, আপনার onCreateOptionsMenu() কলব্যাকের সময় আপনার এটি করা উচিত।

একটি সঙ্কুচিত অ্যাকশন ভিউ নিয়ন্ত্রণ করতে, আপনি সংশ্লিষ্ট MenuItem collapseActionView() এবং expandActionView() কল করতে পারেন।

একটি কাস্টম অ্যাকশন ভিউ তৈরি করার সময়, আপনি যখন ভিউটি প্রসারিত এবং ভেঙে পড়ার সময় কলব্যাকগুলি গ্রহণ করতে নতুন CollapsibleActionView বিষয়গুলিও প্রয়োগ করতে পারেন।

অ্যাকশন বারের জন্য অন্যান্য এপিআই

  • setHomeButtonEnabled() আপনাকে আইকন/লোগো বাড়িতে নেভিগেট করার জন্য বোতাম হিসাবে আচরণ করে বা "আপ" (এটি বোতাম হিসাবে আচরণ করার জন্য "সত্য" পাস করুন) নির্দিষ্ট করতে দেয়।
  • setIcon() এবং setLogo() আপনাকে রানটাইমে অ্যাকশন বার আইকন বা লোগো সংজ্ঞায়িত করার অনুমতি দেয়।
  • Fragment.setMenuVisibility() । যদি খণ্ডটি ক্রিয়াকলাপে যুক্ত করা হয় তবে এটি কার্যকর তবে এটি দৃশ্যমান নয়, সুতরাং মেনু আইটেমগুলি লুকানো উচিত।
  • FragmentManager.invalidateOptionsMenu() আপনাকে খণ্ডিত জীবনচক্রের বিভিন্ন রাজ্যের সময় ক্রিয়াকলাপ বিকল্প মেনুটিকে অকার্যকর করতে দেয় যেখানে Activity থেকে সমতুল্য পদ্ধতি ব্যবহার করা পাওয়া যায় না।

ইউজার ইন্টারফেস এবং ভিউ

অ্যান্ড্রয়েড 4.0.০ বিভিন্ন নতুন ভিউ এবং অন্যান্য ইউআই উপাদানগুলির সাথে পরিচয় করিয়ে দেয়।

গ্রিডলেআউট

GridLayout একটি নতুন ভিউ গ্রুপ যা একটি আয়তক্ষেত্রাকার গ্রিডে শিশুদের দৃষ্টিভঙ্গি রাখে। TableLayout বিপরীতে, GridLayout একটি সমতল শ্রেণিবিন্যাসের উপর নির্ভর করে এবং কাঠামো সরবরাহের জন্য টেবিল সারিগুলির মতো মধ্যবর্তী দর্শনগুলি ব্যবহার করে না। পরিবর্তে, বাচ্চারা নির্দিষ্ট করে যে কোন সারি (গুলি) এবং কলাম (গুলি) তাদের দখল করা উচিত (কোষগুলি একাধিক সারি এবং/অথবা কলামগুলি বিস্তৃত করতে পারে) এবং ডিফল্টরূপে গ্রিডের সারি এবং কলামগুলি জুড়ে ধারাবাহিকভাবে স্থাপন করা হয়। GridLayout ওরিয়েন্টেশন নির্ধারণ করে যে অনুক্রমিক বাচ্চারা অনুভূমিকভাবে বা উল্লম্বভাবে ডিফল্টরূপে নির্ধারিত হয় কিনা। বাচ্চাদের মধ্যে স্থানটি নতুন Space ভিউয়ের উদাহরণগুলি ব্যবহার করে বা বাচ্চাদের উপর প্রাসঙ্গিক মার্জিন পরামিতি সেট করে নির্দিষ্ট করা যেতে পারে।

GridLayout ব্যবহার করে নমুনাগুলির জন্য এপিডেমোস দেখুন।

টেক্সচারভিউ

TextureView একটি নতুন ভিউ যা আপনাকে একটি সামগ্রী স্ট্রিম প্রদর্শন করতে দেয়, যেমন একটি ভিডিও বা একটি ওপেনজিএল দৃশ্য। যদিও SurfaceView অনুরূপ, TextureView অনন্য যে এটি একটি পৃথক উইন্ডো তৈরি করার পরিবর্তে নিয়মিত দৃশ্যের মতো আচরণ করে, যাতে আপনি এটি অন্য কোনও View অবজেক্টের মতো আচরণ করতে পারেন। উদাহরণস্বরূপ, আপনি ট্রান্সফর্মগুলি প্রয়োগ করতে পারেন, ViewPropertyAnimator ব্যবহার করে এটি অ্যানিমেট করতে পারেন বা setAlpha() এর সাথে এর অস্বচ্ছতা সামঞ্জস্য করতে পারেন।

সাবধান থাকুন যে TextureView কেবল একটি হার্ডওয়্যার ত্বরণযুক্ত উইন্ডোর মধ্যে কাজ করে।

আরও তথ্যের জন্য, TextureView ডকুমেন্টেশন দেখুন।

স্যুইচ উইজেট

নতুন Switch উইজেটটি একটি দ্বি-রাষ্ট্রীয় টগল যা ব্যবহারকারীরা দুটি রাজ্যের মধ্যে একটি বিকল্প টগল করতে একপাশে বা অন্যদিকে (বা কেবল আলতো চাপুন) টেনে আনতে পারে।

আপনি android:textOn এবং android:textOff বৈশিষ্ট্যগুলি চালু এবং অফ সেটিংয়ে যখন স্যুইচটিতে উপস্থিত হওয়ার জন্য পাঠ্যটি নির্দিষ্ট করতে পারে। android:text বৈশিষ্ট্য আপনাকে স্যুইচ পাশাপাশি একটি লেবেল স্থাপন করতে দেয়।

স্যুইচগুলি ব্যবহার করে একটি নমুনার জন্য, স্যুইচগুলি দেখুন x

অ্যান্ড্রয়েড 3.0 আপনার নির্দিষ্ট করা অ্যাঙ্কর পয়েন্টে পপ আপ করা সংক্ষিপ্ত প্রাসঙ্গিক মেনুগুলি তৈরি করতে PopupMenu প্রবর্তন করেছে (সাধারণত নির্বাচিত আইটেমের বিন্দুতে)। অ্যান্ড্রয়েড ৪.০ কয়েকটি দরকারী বৈশিষ্ট্য সহ PopupMenu প্রসারিত করে:

  • আপনি এখন সহজেই একটি এক্সএমএল মেনু সংস্থান থেকে inflate() এর সাথে একটি পপআপ মেনুর সামগ্রীগুলি স্ফীত করতে পারেন, এটি মেনু রিসোর্স আইডিটি পাস করে।
  • আপনি এখন একটি PopupMenu.OnDismissListener তৈরি করতে পারেন ond

পছন্দসমূহ

একটি নতুন TwoStatePreference অ্যাবস্ট্রাক্ট শ্রেণি এমন পছন্দগুলির ভিত্তি হিসাবে কাজ করে যা একটি দ্বি-রাষ্ট্রীয় নির্বাচনের বিকল্প সরবরাহ করে। নতুন SwitchPreference হ'ল TwoStatePreference একটি এক্সটেনশন যা ব্যবহারকারীদের অতিরিক্ত পছন্দের স্ক্রিন বা ডায়ালগ খোলার প্রয়োজন ছাড়াই কোনও সেটিংটি চালু বা বন্ধ করতে দেয় এমন পছন্দের ভিউতে একটি Switch উইজেট সরবরাহ করে। উদাহরণস্বরূপ, সেটিংস অ্যাপ্লিকেশনটি ওয়াই-ফাই এবং ব্লুটুথ সেটিংসের জন্য একটি SwitchPreference ব্যবহার করে।

সিস্টেম থিম

অ্যান্ড্রয়েড 4.0.০ কে লক্ষ্য করে এমন সমস্ত অ্যাপ্লিকেশনগুলির জন্য ডিফল্ট থিম ( “14" বা উচ্চতর targetSdkVersion বা minSdkVersion সেট করে) এখন" ডিভাইস ডিফল্ট "থিম: Theme.DeviceDefault হতে পারে This নির্দিষ্ট ডিভাইস দ্বারা।

থিমগুলির Theme.Holo পরিবার অ্যান্ড্রয়েডের একই সংস্করণ চালানোর সময় একটি ডিভাইস থেকে অন্য ডিভাইসে পরিবর্তন না করার গ্যারান্টিযুক্ত। আপনি যদি আপনার ক্রিয়াকলাপগুলিতে কোনও Theme.Holo থিম স্পষ্টভাবে প্রয়োগ করেন তবে আপনি আশ্বাস দিতে পারেন যে এই থিমগুলি একই প্ল্যাটফর্ম সংস্করণের মধ্যে বিভিন্ন ডিভাইসে চরিত্র পরিবর্তন করবে না।

আপনি যদি আপনার অ্যাপ্লিকেশনটিকে সামগ্রিক ডিভাইস থিমের সাথে মিশ্রিত করতে চান (যেমন যখন বিভিন্ন OEMS সিস্টেমের জন্য বিভিন্ন ডিফল্ট থিম সরবরাহ করে), আপনার স্পষ্টভাবে থিমগুলি থেকে থিমগুলি প্রয়োগ করা উচিত Theme.DeviceDefault পরিবার।

বিকল্প মেনু বোতাম

অ্যান্ড্রয়েড 4.0 দিয়ে শুরু করে, আপনি লক্ষ্য করবেন যে হ্যান্ডসেটগুলি আর মেনু হার্ডওয়্যার বোতামের প্রয়োজন হয় না। তবে, যদি আপনার বিদ্যমান অ্যাপ্লিকেশনটি কোনও বিকল্প মেনু সরবরাহ করে এবং সেখানে একটি মেনু বোতাম থাকার প্রত্যাশা করে তবে আপনার এই সম্পর্কে চিন্তা করার দরকার নেই। বিদ্যমান অ্যাপ্লিকেশনগুলি তাদের প্রত্যাশার সাথে কাজ চালিয়ে যাওয়ার বিষয়টি নিশ্চিত করার জন্য, সিস্টেমটি অ্যান্ড্রয়েডের পুরানো সংস্করণগুলির জন্য ডিজাইন করা অ্যাপ্লিকেশনগুলির জন্য একটি অন-স্ক্রিন মেনু বোতাম সরবরাহ করে।

সেরা ব্যবহারকারীর অভিজ্ঞতার জন্য, নতুন এবং আপডেট হওয়া অ্যাপ্লিকেশনগুলির পরিবর্তে মেনু আইটেমগুলিতে অ্যাক্সেস সরবরাহ করতে ActionBar ব্যবহার করা উচিত এবং সর্বশেষতম ফ্রেমওয়ার্ক ডিফল্ট আচরণের সুবিধা নিতে "14"targetSdkVersion সেট করুন।

সিস্টেম ইউআই দৃশ্যমানতার জন্য নিয়ন্ত্রণ

অ্যান্ড্রয়েডের প্রথম দিন থেকে, সিস্টেমটি স্ট্যাটাস বার হিসাবে পরিচিত একটি ইউআই উপাদান পরিচালনা করেছে, যা হ্যান্ডসেট ডিভাইসের শীর্ষে ক্যারিয়ার সিগন্যাল, সময়, বিজ্ঞপ্তি ইত্যাদির মতো তথ্য সরবরাহ করতে থাকে। অ্যান্ড্রয়েড 3.0 ট্যাবলেট ডিভাইসের জন্য সিস্টেম বার যুক্ত করেছে, যা স্ক্রিনের নীচে থাকে সিস্টেম নেভিগেশন নিয়ন্ত্রণগুলি (বাড়ি, পিছনে এবং আরও কিছু) সরবরাহ করতে এবং স্ট্যাটাস বার দ্বারা সরবরাহিত উপাদানগুলির জন্য একটি ইন্টারফেস। অ্যান্ড্রয়েড 4.0 এ, সিস্টেমটি নেভিগেশন বার নামে একটি নতুন ধরণের সিস্টেম ইউআই সরবরাহ করে। আপনি নেভিগেশন বারকে হ্যান্ডসেটগুলির জন্য ডিজাইন করা সিস্টেম বারের একটি পুনরায় সুরযুক্ত সংস্করণ হিসাবে বিবেচনা করতে পারেন-এটি এমন ডিভাইসগুলির জন্য নেভিগেশন নিয়ন্ত্রণ সরবরাহ করে যা সিস্টেমটি নেভিগেট করার জন্য হার্ডওয়্যার অংশ নেই, তবে এটি সিস্টেম বারের বিজ্ঞপ্তি ইউআই এবং নিয়ন্ত্রণগুলি সেট করে। যেমন, নেভিগেশন বার সরবরাহ করে এমন একটি ডিভাইস শীর্ষে স্ট্যাটাস বারও রয়েছে।

আজ অবধি, আপনি FLAG_FULLSCREEN পতাকা ব্যবহার করে হ্যান্ডসেটগুলিতে স্ট্যাটাস বারটি আড়াল করতে পারেন। অ্যান্ড্রয়েড ৪.০ -তে, সিস্টেম বারের দৃশ্যমানতা নিয়ন্ত্রণ করে এমন এপিআইগুলি সিস্টেম বার এবং নেভিগেশন বার উভয়ের আচরণকে আরও ভালভাবে প্রতিফলিত করতে আপডেট করা হয়েছে:

  • SYSTEM_UI_FLAG_LOW_PROFILE পতাকা STATUS_BAR_HIDDEN পতাকাটি প্রতিস্থাপন করে। যখন সেট করা হয়, এই পতাকাটি সিস্টেম বার বা নেভিগেশন বারের জন্য "লো প্রোফাইল" মোড সক্ষম করে Navigion নেভিগেশন বোতামগুলি ম্লান এবং সিস্টেম বারের অন্যান্য উপাদানগুলিও লুকিয়ে রাখে। এটি সক্ষম করা সিস্টেম নেভিগেশন বোতামগুলির জন্য বিভ্রান্তি ছাড়াই আরও নিমজ্জনিত গেমগুলি তৈরি করার জন্য দরকারী।
  • SYSTEM_UI_FLAG_VISIBLE পতাকা সিস্টেম বার বা নেভিগেশন বারের জন্য অনুরোধ করার জন্য STATUS_BAR_VISIBLE পতাকাটি প্রতিস্থাপন করে।
  • SYSTEM_UI_FLAG_HIDE_NAVIGATION একটি নতুন পতাকা যা নেভিগেশন বারটিকে পুরোপুরি আড়াল করার জন্য অনুরোধ করে। সচেতন থাকুন যে এটি কেবল কিছু হ্যান্ডসেট দ্বারা ব্যবহৃত নেভিগেশন বারের জন্য কাজ করে (এটি ট্যাবলেটগুলিতে সিস্টেম বারটি লুকায় না )। সিস্টেমটি ব্যবহারকারী ইনপুট গ্রহণের সাথে সাথে নেভিগেশন বারটি দেখতে ফিরে আসে। এই হিসাবে, এই মোডটি মূলত ভিডিও প্লেব্যাক বা অন্যান্য কেসগুলির জন্য দরকারী যেখানে পুরো স্ক্রিনটি প্রয়োজন তবে ব্যবহারকারীর ইনপুট প্রয়োজন হয় না।

আপনি আপনার ক্রিয়াকলাপের যে কোনও ভিউতে setSystemUiVisibility() কল করে সিস্টেম বার এবং নেভিগেশন বারের জন্য এই প্রতিটি পতাকা সেট করতে পারেন। উইন্ডো ম্যানেজারটি আপনার উইন্ডোর সমস্ত দর্শন থেকে সমস্ত পতাকা একত্রিত করে (বা-একসাথে) একত্রিত করে এবং আপনার উইন্ডোতে ইনপুট ফোকাস না থাকলে সিস্টেম ইউআইতে প্রয়োগ করে। যখন আপনার উইন্ডোটি ইনপুট ফোকাস হারাবে (ব্যবহারকারী আপনার অ্যাপ্লিকেশন থেকে দূরে নেভিগেট করে, বা একটি ডায়ালগ উপস্থিত হয়), আপনার পতাকাগুলি কার্যকর হওয়া বন্ধ করে দেয়। একইভাবে, আপনি যদি ভিউ হায়ারার্কি থেকে এই মতামতগুলি সরিয়ে ফেলেন তবে তাদের পতাকাগুলি আর প্রয়োগ হয় না।

সিস্টেম ইউআইতে দৃশ্যমানতা পরিবর্তনের সাথে আপনার ক্রিয়াকলাপের অন্যান্য ইভেন্টগুলির সিঙ্ক্রোনাইজ করার জন্য (উদাহরণস্বরূপ, সিস্টেম ইউআই লুকিয়ে থাকলে অ্যাকশন বার বা অন্যান্য ইউআই নিয়ন্ত্রণগুলি লুকান), আপনার একটি View.OnSystemUiVisibilityChangeListener নিবন্ধন করা উচিত on বা নেভিগেশন বার পরিবর্তন।

বিভিন্ন সিস্টেম ইউআই বিকল্পগুলির একটি প্রদর্শনের জন্য ওভারস্ক্যান্যাকটিভিটি শ্রেণি দেখুন।

ইনপুট ফ্রেমওয়ার্ক

অ্যান্ড্রয়েড 4.0 কার্সার হোভার ইভেন্ট এবং নতুন স্টাইলাস এবং মাউস বোতাম ইভেন্টগুলির জন্য সমর্থন যুক্ত করে।

হোভার ইভেন্টগুলি

View ক্লাসটি এখন পয়েন্টার ডিভাইসগুলি (যেমন মাউস বা অন্যান্য ডিভাইসগুলি যা অন-স্ক্রিন কার্সার চালায়) এর মাধ্যমে আরও সমৃদ্ধ ইন্টারঅ্যাকশন সক্ষম করতে "হোভার" ইভেন্টগুলিকে সমর্থন করে।

একটি ভিউতে হোভার ইভেন্টগুলি পেতে, View.OnHoverListener প্রয়োগ করুন এবং এটি setOnHoverListener() এর সাথে নিবন্ধন করুন। যখন কোনও হোভার ইভেন্টটি ভিউতে দেখা দেয়, আপনার শ্রোতা onHover() এর কাছে একটি কল পান, ইভেন্টটি প্রাপ্ত View এবং একটি MotionEvent যা ঘটেছিল যে হোভার ইভেন্টের ধরণটি বর্ণনা করে। হোভার ইভেন্টটি নিম্নলিখিতগুলির মধ্যে একটি হতে পারে:

আপনার View.OnHoverListener যদি হোভার ইভেন্টটি পরিচালনা করে তবে onHover() থেকে সত্য ফিরে আসা উচিত। যদি আপনার শ্রোতা মিথ্যা ফিরিয়ে দেয় তবে হোভার ইভেন্টটি যথারীতি পিতামাতার দৃশ্যে প্রেরণ করা হবে।

যদি আপনার অ্যাপ্লিকেশনটি বোতাম বা অন্যান্য উইজেটগুলি ব্যবহার করে যা বর্তমান অবস্থার উপর ভিত্তি করে তাদের চেহারা পরিবর্তন করে তবে আপনি এখন android:state_hovered অ্যাট্রিবিউটটি যখন কোনও কার্সার ভিউতে ঘুরে বেড়ায় তখন একটি আলাদা ব্যাকগ্রাউন্ড অঙ্কনযোগ্য সরবরাহ করতে পারে এমন একটি রাষ্ট্রীয় তালিকায় স্টেট_হোভারড বৈশিষ্ট্য।

নতুন হোভার ইভেন্টগুলির একটি প্রদর্শনের জন্য, এপিডেমোসে হোভার ক্লাসটি দেখুন।

স্টাইলাস এবং মাউস বোতাম ইভেন্টগুলি

অ্যান্ড্রয়েড এখন একটি স্টাইলাস ইনপুট ডিভাইস যেমন ডিজিটাইজার ট্যাবলেট পেরিফেরিয়াল বা স্টাইলাস-সক্ষম টাচ স্ক্রিন থেকে ইনপুট গ্রহণের জন্য এপিআই সরবরাহ করে।

স্টাইলাস ইনপুট স্পর্শ বা মাউস ইনপুট করতে একইভাবে কাজ করে। স্টাইলাস যখন ডিজিটাইজারের সাথে যোগাযোগ করে, তখন অ্যাপ্লিকেশনগুলি যখন কোনও আঙুলটি প্রদর্শনটি স্পর্শ করতে ব্যবহৃত হয় ঠিক তেমন স্পর্শ ইভেন্টগুলি গ্রহণ করে। স্টাইলাস যখন ডিজিটাইজারের উপরে ঘুরে বেড়াচ্ছে, তখন অ্যাপ্লিকেশনগুলি হোভার ইভেন্টগুলি ঠিক যেমন তারা যখন কোনও বোতাম টিপানো না থাকাকালীন একটি মাউস পয়েন্টারটি ডিসপ্লে জুড়ে সরানো হচ্ছিল ঠিক তেমন ইভেন্টগুলি গ্রহণ করে।

আপনার অ্যাপ্লিকেশনটি MotionEvent getToolType() ব্যবহার করে TOOL_TYPE_MOUSE পয়েন্টারের সাথে TOOL_TYPE_STYLUS "সরঞ্জামের ধরণ" TOOL_TYPE_FINGER জিজ্ঞাসা করে TOOL_TYPE_UNKNOWN , মাউস, স্টাইলাস এবং ইরেজার ইনপুটের মধ্যে পার্থক্য করতে পারে TOOL_TYPE_ERASER সরঞ্জামের ধরণটি জিজ্ঞাসা করে, আপনার অ্যাপ্লিকেশনটি আঙুল বা মাউস ইনপুট থেকে বিভিন্ন উপায়ে স্টাইলাস ইনপুট পরিচালনা করতে বেছে নিতে পারে।

আপনার অ্যাপ্লিকেশনটি getButtonState() ব্যবহার করে একটি MotionEvent "বোতামের অবস্থা" জিজ্ঞাসা করে যে মাউস বা স্টাইলাস বোতামগুলি চাপানো হয়েছে তাও জিজ্ঞাসা করতে পারে। বর্তমানে সংজ্ঞায়িত বোতামের রাজ্যগুলি হ'ল: BUTTON_PRIMARY , BUTTON_SECONDARY , BUTTON_TERTIARY , BUTTON_BACK এবং BUTTON_FORWARD । এবং ফরোয়ার্ড মাউস বোতামগুলি স্বয়ংক্রিয়ভাবে KEYCODE_BACK এবং KEYCODE_FORWARD কীগুলিতে ম্যাপ করা হয়।

যোগাযোগের অবস্থান এবং চাপটি যথাযথভাবে পরিমাপ করার পাশাপাশি, কিছু স্টাইলাস ইনপুট ডিভাইসগুলি স্টাইলাস টিপ এবং ডিজিটাইজার, স্টাইলাস টিল্ট কোণ এবং স্টাইলাস ওরিয়েন্টেশন কোণের মধ্যে দূরত্বের প্রতিবেদন করে। আপনার অ্যাপ্লিকেশনটি অক্ষ কোডগুলি AXIS_DISTANCE , AXIS_TILT এবং AXIS_ORIENTATION সহ getAxisValue() ব্যবহার করে এই তথ্যটি জিজ্ঞাসা করতে পারে।

সরঞ্জামের ধরণ, বোতামের রাজ্যগুলি এবং নতুন অক্ষ কোডগুলির একটি প্রদর্শনের জন্য, এপিডেমোসে টাচপেইন্ট শ্রেণি দেখুন।

বৈশিষ্ট্য

নতুন Property শ্রেণি যে কোনও অবজেক্টে একটি সম্পত্তি নির্দিষ্ট করার জন্য একটি দ্রুত, দক্ষ এবং সহজ উপায় সরবরাহ করে যা কলারদের লক্ষ্য অবজেক্টগুলিতে সাধারণভাবে সেট করতে/মান পেতে দেয়। এটি ক্ষেত্র/পদ্ধতি রেফারেন্সগুলির চারপাশে যাওয়ার কার্যকারিতাও অনুমতি দেয় এবং ক্ষেত্রগুলি/পদ্ধতিগুলি কী তা বিশদ না জেনে কোড কোডকে সম্পত্তিটির মান নির্ধারণ/পেতে অনুমতি দেয়।

উদাহরণস্বরূপ, আপনি যদি অবজেক্ট foo ফিল্ড bar মান সেট করতে চান তবে আপনি আগে এটি করবেন:

কোটলিন

foo.bar = value

জাভা

foo.bar = value;

আপনি যদি অন্তর্নিহিত ব্যক্তিগত ফিল্ড bar জন্য সেটারটিকে কল করতে চান তবে আপনি আগে এটি করবেন:

কোটলিন

foo.setBar(value)

জাভা

foo.setBar(value);

তবে, আপনি যদি foo উদাহরণটির চারপাশে যেতে চান এবং অন্য কোনও কোড bar মান সেট করতে চান তবে অ্যান্ড্রয়েড 4.0 এর আগে এটি করার কোনও উপায় নেই।

Property শ্রেণি ব্যবহার করে, আপনি ক্লাস Foo এ একটি Property অবজেক্ট BAR ঘোষণা করতে পারেন যাতে আপনি উদাহরণস্বরূপ ক্লাস Foo foo ক্ষেত্রে ক্ষেত্রটি সেট করতে পারেন:

কোটলিন

BAR.set(foo, value)

জাভা

BAR.set(foo, value);

View ক্লাসটি এখন আপনাকে বিভিন্ন ক্ষেত্র সেট করার অনুমতি দেওয়ার জন্য Property শ্রেণীর উপার্জন করে, যেমন অ্যান্ড্রয়েড 3.0 ( ROTATION , ROTATION_X , TRANSLATION_X , ইত্যাদি) এ যুক্ত হওয়া রূপান্তর বৈশিষ্ট্যগুলি।

ObjectAnimator ক্লাসটি Property শ্রেণিটিও ব্যবহার করে, যাতে আপনি কোনও Property সহ একটি ObjectAnimator তৈরি করতে পারেন, যা স্ট্রিং-ভিত্তিক পদ্ধতির চেয়ে দ্রুত, আরও দক্ষ এবং আরও টাইপ-নিরাপদ।

হার্ডওয়্যার ত্বরণ

অ্যান্ড্রয়েড ৪.০ দিয়ে শুরু করে, সমস্ত উইন্ডোগুলির জন্য হার্ডওয়্যার ত্বরণ ডিফল্টরূপে সক্ষম করা হয় যদি আপনার অ্যাপ্লিকেশনটি targetSdkVersion বা minSdkVersion “14" বা উচ্চতর করে সেট করে থাকে। .

যদি প্রয়োজন হয় তবে আপনি স্বতন্ত্র <activity> উপাদান বা <application> উপাদানটির জন্য hardwareAccelerated অ্যাট্রিবিউট সহ হার্ডওয়্যার ত্বরণটি ম্যানুয়ালি অক্ষম করতে পারেন। আপনি setLayerType(LAYER_TYPE_SOFTWARE) কল করে পৃথক দর্শনগুলির জন্য বিকল্পভাবে হার্ডওয়্যার ত্বরণ অক্ষম করতে পারেন।

অসমর্থিত অঙ্কন অপারেশনগুলির একটি তালিকা সহ হার্ডওয়্যার ত্বরণ সম্পর্কে আরও তথ্যের জন্য, হার্ডওয়্যার ত্বরণ নথিটি দেখুন।

জেএনআই পরিবর্তন

অ্যান্ড্রয়েডের পূর্ববর্তী সংস্করণগুলিতে, জেএনআই স্থানীয় রেফারেন্সগুলি পরোক্ষ হ্যান্ডলগুলি ছিল না; অ্যান্ড্রয়েড সরাসরি পয়েন্টার ব্যবহার করেছিল। যতক্ষণ না আবর্জনা সংগ্রাহক অবজেক্টগুলি সরিয়ে না নেয় ততক্ষণ এটি কোনও সমস্যা ছিল না, তবে এটি কাজ করে বলে মনে হয়েছিল কারণ এটি বগি কোডটি লেখা সম্ভব করেছিল। অ্যান্ড্রয়েড ৪.০ -তে, সিস্টেমটি এখন এই বাগগুলি সনাক্ত করতে পরোক্ষ রেফারেন্স ব্যবহার করে।

জেএনআই স্থানীয় রেফারেন্সগুলির আইএনএস এবং আউটগুলি জেএনআই টিপসগুলিতে "স্থানীয় এবং গ্লোবাল রেফারেন্স" এ বর্ণিত হয়েছে। অ্যান্ড্রয়েড ৪.০ -এ, এই ত্রুটিগুলি সনাক্ত করার জন্য চেকজনি বাড়ানো হয়েছে। জেএনআই রেফারেন্সগুলির সাথে সাধারণ ত্রুটি সম্পর্কে একটি আসন্ন পোস্টের জন্য অ্যান্ড্রয়েড বিকাশকারীদের ব্লগ দেখুন এবং দেখুন আপনি কিভাবে তাদের ঠিক করতে পারেন।

জেএনআই বাস্তবায়নের এই পরিবর্তনটি কেবলমাত্র অ্যাপ্লিকেশনগুলিকে প্রভাবিত করে যা অ্যান্ড্রয়েড 4.0.০ লক্ষ্য করে targetSdkVersion বা minSdkVersion “14" বা উচ্চতর করে সেট করে। আপনি যদি এই বৈশিষ্ট্যগুলি কোনও নিম্ন মানের সাথে সেট করেন তবে জেএনআই স্থানীয় রেফারেন্সগুলি পূর্ববর্তী সংস্করণগুলির মতোই আচরণ করে .

ওয়েবকিট

  • ওয়েবকিট সংস্করণ 534.30 এ আপডেট হয়েছে
  • WebView এবং অন্তর্নির্মিত ব্রাউজারে গ্লাইফগুলির সংমিশ্রনের জন্য প্রয়োজনীয় জটিল চরিত্র সমর্থন সহ) ইন্ডিক ফন্টগুলির জন্য সমর্থন (দেবনাগরী, বাংলা এবং তামিল সহ
  • WebView এবং অন্তর্নির্মিত ব্রাউজারে ইথিওপিক, জর্জিয়ান এবং আর্মেনিয়ান ফন্টগুলির জন্য সমর্থন
  • ওয়েবড্রাইভারের পক্ষে সমর্থন আপনার পক্ষে WebView ব্যবহার করে এমন অ্যাপ্লিকেশনগুলি পরীক্ষা করা সহজ করে তোলে

অ্যান্ড্রয়েড ব্রাউজার

ব্রাউজার অ্যাপ্লিকেশন ওয়েব অ্যাপ্লিকেশনগুলিকে সমর্থন করার জন্য নিম্নলিখিত বৈশিষ্ট্যগুলি যুক্ত করে:

অনুমতি

নিম্নলিখিত নতুন অনুমতি আছে:

ডিভাইস বৈশিষ্ট্য

The following are new device features:

  • FEATURE_WIFI_DIRECT : Declares that the application uses Wi-Fi for peer-to-peer communications.

For a detailed view of all API changes in Android 4.0 (API Level 14), see the API Differences Report .

পূর্ববর্তী API

In addition to everything above, Android 4.0 naturally supports all APIs from previous releases. Because the Android 3.x platform is available only for large-screen devices, if you've been developing primarily for handsets, then you might not be aware of all the APIs added to Android in these recent releases.

Here's a look at some of the most notable APIs you might have missed that are now available on handsets as well:

অ্যান্ড্রয়েড 3.0
  • Fragment : A framework component that allows you to separate distinct elements of an activity into self-contained modules that define their own UI and lifecycle. See the Fragments developer guide.
  • ActionBar : A replacement for the traditional title bar at the top of the activity window. It includes the application logo in the left corner and provides a new interface for menu items. See the Action Bar developer guide.
  • Loader : A framework component that facilitates asynchronous loading of data in combination with UI components to dynamically load data without blocking the main thread. See the Loaders developer guide.
  • System clipboard: Applications can copy and paste data (beyond mere text) to and from the system-wide clipboard. Clipped data can be plain text, a URI, or an intent. See the Copy and Paste developer guide.
  • Drag and drop: A set of APIs built into the view framework that facilitates drag and drop operations. See the Drag and Drop developer guide.
  • An all new flexible animation framework allows you to animate arbitrary properties of any object (View, Drawable, Fragment, Object, or anything else) and define animation aspects such as duration, interpolation, repeat and more. The new framework makes Animations in Android simpler than ever. See the Property Animation developer guide.
  • RenderScript graphics and compute engine: RenderScript offers a high performance 3D graphics rendering and compute API at the native level, which you write in the C (C99 standard), providing the type of performance you expect from a native environment while remaining portable across various CPUs and GPUs. See the RenderScript developer guide.
  • Hardware accelerated 2D graphics: You can now enable the OpenGL renderer for your application by setting {android:hardwareAccelerated="true"} in your manifest element's <application> element or for individual <activity> elements. This results in smoother animations, smoother scrolling, and overall better performance and response to user interaction.

    Note: If you set your application's minSdkVersion or targetSdkVersion to "14" or higher, hardware acceleration is enabled by default.

  • এবং অনেক, আরো অনেক কিছু. See the Android 3.0 Platform notes for more information.
অ্যান্ড্রয়েড 3.1
  • USB APIs: Powerful new APIs for integrating connected peripherals with Android applications. The APIs are based on a USB stack and services that are built into the platform, including support for both USB host and device interactions. See the USB Host and Accessory developer guide.
  • MTP/PTP APIs: Applications can interact directly with connected cameras and other PTP devices to receive notifications when devices are attached and removed, manage files and storage on those devices, and transfer files and metadata to and from them. The MTP API implements the PTP (Picture Transfer Protocol) subset of the MTP (Media Transfer Protocol) specification. See the android.mtp documentation.
  • RTP APIs: Android exposes an API to its built-in RTP (Real-time Transport Protocol) stack, which applications can use to manage on-demand or interactive data streaming. In particular, apps that provide VOIP, push-to-talk, conferencing, and audio streaming can use the API to initiate sessions and transmit or receive data streams over any available network. See the android.net.rtp documentation.
  • Support for joysticks and other generic motion inputs.
  • See the Android 3.1 Platform notes for many more new APIs.
অ্যান্ড্রয়েড 3.2
  • New screens support APIs that give you more control over how your applications are displayed across different screen sizes. The API extends the existing screen support model with the ability to precisely target specific screen size ranges by dimensions, measured in density-independent pixel units (such as 600dp or 720dp wide), rather than by their generalized screen sizes (such as large or xlarge ) For example, this is important in order to help you distinguish between a 5" device and a 7" device, which would both traditionally be bucketed as "large" screens. See the blog post, New Tools for Managing Screen Sizes .
  • New constants for <uses-feature> to declare landscape or portrait screen orientation requirements.
  • The device "screen size" configuration now changes during a screen orientation change. If your app targets API level 13 or higher, you must handle the "screenSize" configuration change if you also want to handle the "orientation" configuration change. See android:configChanges for more information.
  • See the Android 3.2 Platform notes for other new APIs.

API স্তর

The Android 4.0 API is assigned an integer identifier— 14 —that is stored in the system itself. This identifier, called the "API level", allows the system to correctly determine whether an application is compatible with the system, prior to installing the application.

To use APIs introduced in Android 4.0 in your application, you need compile the application against an Android platform that supports API level 14 or higher. Depending on your needs, you might also need to add an android:minSdkVersion="14" attribute to the <uses-sdk> element.

For more information, read What is API Level?