অ্যান্ড্রয়েড 6.0 তে ব্লুটুথ লো এনার্জি স্ক্যান করার জন্য অবস্থানটি সক্ষম করা দরকার


105

অ্যান্ড্রয়েড সংস্করণ 6.0 এ আপগ্রেড করার পরে ব্লুটুথ লো এনার্জি (বিএলই) স্ক্যানিং কেবলমাত্র তখনই কাজ করবে যদি ডিভাইসে অবস্থান পরিষেবাদি সক্ষম করা থাকে। রেফারেন্সের জন্য এখানে দেখুন: অ্যান্ড্রয়েড 6.0 এ ব্লুটুথ লো এনার্জি স্টার্টস্ক্যানটি ডিভাইসগুলি খুঁজে পায় না

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

সম্পাদনা আমি উল্লেখ করতে ব্যর্থ হয়েছি যে আমি এআইপি 21 startScan()তে BluetoothLeScannerপ্রদত্ত পদ্ধতিটি ব্যবহার করছি। আমি এই পদ্ধতিটির প্রয়োজনীয় হিসাবে ম্যানিফেস্টে অবশ্যই কোর্স এবং সূক্ষ্ম অবস্থানের অনুমতি নিয়ে ঠিক আছি। আমি কেবল চাই না যে আমার অ্যাপ্লিকেশন ব্যবহারকারীরা তাদের অ্যাপ্লিকেশনটি তাদের ডিভাইসে (জিপিএস ইত্যাদি) ব্যবহার করতে সক্ষম করুন।

পূর্বে, startScan()পদ্ধতিটি ফোনে অক্ষম করা অবস্থান পরিষেবাগুলির সাথে ফলাফলটি চালিত করে এবং ফিরে আসত। মার্শমেলোতে, একই অ্যাপ্লিকেশনটি "স্ক্যান" করবে তবে চুপচাপ ব্যর্থ হয়েছিল এবং ফোন সার্ভিসগুলিতে অবস্থান পরিষেবাগুলি সক্ষম না করা এবং কোর্স / সূক্ষ্ম অবস্থানের অনুমতিগুলি এখনও ম্যানিফেস্টে থাকা অবস্থায় কোনও ফল দেয়নি।


আপনি কোন ডিভাইস ব্যবহার করছেন? আমি মোটো জি ২ য় প্রজন্মের সাথে একই সমস্যায় পড়েছি। মোটো জি 1 ম জেনারেশন এবং নেক্সাস 6 স্পষ্টভাবে লোকেশন পরিষেবাগুলি সক্ষম না করে একই কোডের সাথে জরিমানা করে।
ছায়াচ্ছন্ন

আমি এটি মার্শমালো চলমান যে কোনও ডিভাইসে দেখেছি - নেক্সাস 5 এক্স, স্যামসাং এস 6, স্যামসাং এস 7, এলজি জি 4
ভি-পিটিআর

উত্তর:


89

না, এটি কোনও বাগ নয়।

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

তবে ইস্যুতে, কেন অবস্থান পরিষেবাগুলি (জিপিএস ইত্যাদি) প্রয়োজন তা বিবেচনা করে না এবং এটি মনে হয় না যে তারা বিষয়টি বোঝাতে সমস্যাটি পুনর্বিবেচনা করছেন কেননা এটি উদ্দেশ্যমূলক আচরণ হিসাবে চিহ্নিত করা হয়েছে।

প্রশ্নের দ্বিতীয় অংশের উত্তর দিতে: হ্যাঁ, অবস্থান পরিষেবাদি সক্ষম না করে স্ক্যান করা সম্ভব। আপনি ব্যবহার করে একটি ব্লুটুথ ক্লাসিক স্ক্যান করতে পারেন BluetoothAdapter.getDefaultAdapter().startDiscovery()এবং এটি অবস্থান পরিষেবাগুলি বন্ধ করে দিয়ে কাজ করবে। এটি সমস্ত ব্লুটুথ ডিভাইসগুলি, BLE এবং অন্যথায় আবিষ্কার করবে। তবে, বিএলই ডিভাইসগুলির কোনও স্ক্যান রেকর্ড থাকবে না যার ফলস্বরূপ তারা যদি দেখা হয় তবে তাদের কাছে তা ছিল startScan()


12
গুগল দাবি করে যে এটি কোনও ত্রুটি নয় আমাকে শীতল ছেড়ে দেয়। তাদের মনোভাব সরল বিএস।
মার্কি

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

9
আমার যদি এটি সোজা থাকে তবে আমাকে দেখতে দিন। বিএলইর দুর্দান্ত সুবিধা হ'ল "এলই" বিট, অর্থাৎ লো এনার্জি, যার অর্থ আমার ব্যাটারির ড্রেন হ্রাস পেয়েছে। অবশ্যই, এই সঞ্চয়গুলি অর্জন করার জন্য, আমাকে জিপিএস চালু করতে হবে, যা একটি পরিচিত ব্যাটারি হগ, এইভাবে বিএলইয়ের ব্যবহার থেকে আমার যে কোনও বিদ্যুৎ সঞ্চয় উপার্জন করতে পারে তা উপেক্ষা করে। / আমার অবিশ্বাসের দিকে মাথা নেড়ে।
dgnuff

10
এই অবিশ্বাস্য. অবশ্যই গুগল যদি অবস্থান নির্ধারণের জন্য বিএলই স্ক্যানগুলি ব্যবহার করার বিষয়ে উদ্বিগ্ন ছিল, তাদের জিপিএস অ্যাক্সেসের অনুমতি দেওয়ার জন্য বাচ্চাকে স্নানের জল দিয়ে ফেলে দেওয়ার পরিবর্তে তাদের জন্য আলাদা অনুমতি যুক্ত করা উচিত ছিল!
Desty

4
@ পিয়ের-লুকপাউর জিপিএস চালু করতে বাধ্য করার অর্থ অন্যান্য অ্যাপ্লিকেশনগুলি যা প্রকৃতপক্ষে অবস্থান পরিষেবাগুলি ব্যবহার করে এটি 'আইনত' দৃশ্যের আড়ালে ব্যবহার করতে পারে। ব্যবহারকারীরা ম্যানুয়ালি জিপিএস বন্ধ করার অন্যতম কারণ হ'ল অ্যাপগুলিকে পর্যায়ক্রমে এটি ব্যবহার করা থেকে বিরত রাখা এবং ব্যাটারি নিষ্কাশন করা, ব্যবহারকারীদের তাদের অবস্থানটি ব্যবহার করার জন্য জানাতে সর্বাধিক পাল্টা স্বজ্ঞাত উপায় Bluetooth
অঙ্কিত

11

আমি সেট করে এই মীমাংসিত targetSdkVersionথেকে 22 Gradle ফাইলে। আপনাকে অবশ্যই ACCESS_COARSE_LOCATIONম্যানিফেস্টে ঘোষণা করতে হবে তবে, ব্যবহারকারী অ্যাপ্লিকেশন সেটিংস থেকে এই অনুমতি অস্বীকার করলেও বিএলই স্ক্যানিং কাজ করবে।

অবস্থানের অনুমতিটির অনুরোধ এড়াতে এটি কেবল একটি হ্যাক। সর্বশেষতম অ্যান্ড্রয়েড সংস্করণগুলি লক্ষ্য করা আরও ভাল।

সম্পাদনা করুন

এই সমাধানটি আর ব্যবহার করা উচিত নয় কারণ গুগল প্লেতে অন্তত অ্যান্ড্রয়েড 8.0 (এপিআই স্তর 26) এর জন্য নতুন অ্যাপ্লিকেশনকে লক্ষ্য করা দরকার। অ্যাপ্লিকেশনগুলিকে বিএলই স্ক্যান করার জন্য অবস্থানের অনুমতিের জন্য অনুরোধ করা উচিত।


দুর্দান্ত, ধন্যবাদ! উদাহরণস্বরূপ আল্টবিকনের মতো মনিটরিংয়ের অনুকরণ করে এমন লাইব্রেরিগুলিতে কী করবেন সে সম্পর্কে আপনার কী ধারণা আছে? অবস্থানটি ছাড়া কাজ করে না :( এবং তারা মূলত একই পদ্ধতি ব্যবহার করছে ... এবং মিনিট সংকলন সংস্করণটি কী? @ জিথিএন
শাহার

23 থেকে 22 এ ডাউনগ্রেড এবং এটি অ্যান্ড্রয়েড 7.0 তেও কাজ করে। আমার প্রাথমিক সমস্যাটি হ'ল আপনাকে স্থানীয়করণ সক্ষম করতে হবে, এখন আমি স্থানীয়করণ অক্ষম থাকা বিএলই ডিভাইসগুলি স্ক্যান করতে পারি।
মারিউজ ওয়াজোভস্কি

4
এটি একটি হ্যাক, তবে এটি প্রস্তাবিত নয় সর্বশেষতম এসডিকে সংস্করণগুলি লক্ষ্য করা ভাল। এটি করার সঠিক ACCESS_COARSE_LOCATION
অ্যারন

4
এটি আর কোনও সমাধান নয় (দেখুন ডেভেলপার.অ্যান্ড্রয়েড. com/distribute/best-practices/develop/… "গুগল প্লেতে 1 অগস্ট, 2018 থেকে কমপক্ষে অ্যান্ড্রয়েড 8.0 (এপিআই স্তর 26) লক্ষ্য করা উচিত এবং এটি অ্যাপ্লিকেশনের আপডেটগুলি লক্ষ্য অ্যান্ড্রয়েড 8.0 1 নভেম্বর 2018 থেকে ")
Étienne

10

আমি যা পেয়েছি তা হ'ল অ্যান্ড্রয়েড 6 এর পরে আপনাকে অবশ্যই ACCESS_COARSE_LOCATION অনুমতি প্রদান করতে হবে। তবে কিছু ডিভাইসে আপনার ফোন লোকেশন পরিষেবা (জিপিএস) চালু করাও প্রয়োজনীয়, যাতে আপনি পেরিফেরিয়াল ডিভাইসগুলি আবিষ্কার করতে পারেন। আমি খুঁজে পেয়েছি যে অ্যান্ড্রয়েড 7.0 সহ নেক্সাস 5x ব্যবহার করছি।


4
নেক্সাস 5 এক্স এবং অ্যান্ড্রয়েড 6
সুরক্ষিত

অ্যান্ড্রয়েড 7.1.1 এর সাথে মোট জি জি
প্লাসে

3

আমি ম্যানিফেস্টেও এটি চেষ্টা করেছিলাম তবে অনুমতিের জন্য অনুরোধ করিনি, কেন তা নিশ্চিত নয়। আপনি কি অ্যাপটি শুরুতে অবস্থানের অনুমতিের জন্য অনুরোধ করছেন? যদি তা না হয়, রানটাইমটিতে আমাদের অনুমতি চাইতে হবে

এছাড়াও আপনার অ্যাপটি ঠিকঠাক কাজ করছে কিনা তা পরীক্ষা করতে আপনি এটি পরীক্ষা করতে পারেন:

সেটিংস> অ্যাপ্লিকেশন> আপনার প্রয়োগ> অনুমতিগুলি খুলুন এবং অবস্থান সক্ষম করুন এবং তারপরে ফলাফলগুলির জন্য স্ক্যান করার চেষ্টা করুন।

আপনি যদি ম্যানিফেস্টে ACCESS_COARSE_LOCATION সরবরাহ করে থাকেন তবে অবস্থানটি এখানে তালিকাবদ্ধ হবে।


4
হ্যাঁ, আপনাকে রানটাইমে স্পষ্টভাবে অনুমতিটির অনুরোধ করতে হবে এবং সেইসাথে ডিভাইসের জন্য অবস্থান পরিষেবাগুলি চালু করতে হবে। তবে আমি ভাবছিলাম যে রানটাইমে লোকেশন সার্ভিস চালু না করে বা কোর্সের লোকেশন অনুমতির জন্য অনুরোধ না করেই কোনও বিএলই স্ক্যান করার কোনও উপায় ছিল কিনা?
ভি-পিটিআর

অনুরোধের অনুমতিগুলি যথেষ্ট নয়, আপনাকে অবস্থান পরিষেবাগুলি সক্ষম করা আছে কিনা তা পরীক্ষা করে দেখার দরকার।
12:30

3

আপনি ব্যবহার করতে পারেন BluetoothAdapter.startDiscovery()
এটি ব্লুটুথ স্মার্ট এবং ক্লাসিক ব্লুটুথ উভয় ডিভাইসের জন্যই স্ক্যান করবে তবে অবস্থান পরিষেবাদি সক্ষম করার দরকার নেই।
(আপনার এখনও ACCESS_COARSE_LOCATIONঅ্যান্ড্রয়েড on এ অনুমতি নেওয়া দরকার ))

BluetoothDevice.getTypeব্লুটুথ স্মার্ট / লো এনার্জি ডিভাইসগুলির জন্য ফিল্টার করতে আপনি পাওয়া ডিভাইসগুলিতে কল করতে পারেন ।


0

ঠিক আছে, আমি Eclipse এ লেখা আমার কোডটির দিকে নজর রেখেছি এবং আমি সেখানে ম্যানিফেস্ট ফাইলটিতে লোকেশন স্টাফটি ঘোষণা না করেই স্টার্টস্ক্যান (এপিআই 21) ফাংশনটি ব্যবহার করি। আমি এখনও সঠিক কলব্যাক পাই আপনি কি অবস্থানের ঘোষণা ছাড়াই কোড চালানোর চেষ্টা করেছেন? অন্যদিকে - আপনি অবহেলিত স্টার্টলেস স্ক্যান (API 18) ব্যবহার করতে পারেন যার জন্য এই অনুমতিগুলির প্রয়োজন নেই। তবে, আমার মতে সার্ভিসে কাঙ্ক্ষিত বৈশিষ্ট্য অনুসন্ধান করা এবং পড়া API এর 18 টি পদ্ধতির সাথে আরও জটিল।


আমি ব্যবহার করছি startScanফাংশন BluetoothLeScanner। আমি উদ্দেশ্যমূলকভাবে অবহিত না হওয়া পদ্ধতিগুলি ব্যবহার করছি। প্রকৃতপক্ষে, আমি এমন ডিভাইসগুলির জন্য যাচাই করছি যা 21 টিরও বেশি এপিআই ব্যবহার করছে বিশেষত প্রদত্ত নতুন পদ্ধতিগুলি ব্যবহার করতে। আমি অবস্থানটি ছাড়াই চেষ্টা করেছি এবং এটি নিঃশব্দে ব্যর্থ। স্ক্যানিং চলছে কিন্তু কিছুই ফেরেনি (পোস্ট 21-এপিআই 21 পদ্ধতি ব্যবহার করে)
ভি-পিটিআর

0

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

আপনি যখন কোনও startScan()পদ্ধতিতে কোনও স্ক্যান করার চেষ্টা করবেন তখন অ্যান্ড্রয়েড ব্যবহারকারীকে অবস্থানের অনুমতি দেওয়ার অনুরোধ জানাবে । অনুমতি অনুমোদিত না হলে আপনার স্ক্যান ব্যর্থ হবে।


আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.