ইউএসবি ডিভাইসে অ্যাক্সেসের অনুমতি দেওয়ার আগে অ্যান্ড্রয়েডের অনুমতি চাইতে কীভাবে বন্ধ করবেন


19

আমার কাছে এমন একটি অ্যাপ্লিকেশন রয়েছে যা কোনও রুটড নো-অ্যান্ড্রয়েড ট্যাবলেট আইসিএস 4.0.3 চলছে যা ইউএসবি হোস্ট মোড ইন্টারফেসের মাধ্যমে একটি ইউএসবি ডিভাইস নিয়ন্ত্রণ করে। Android.hardware.usb.host.xML ফাইলটি / সিস্টেম / ইত্যাদি / অনুমতিগুলিতে উপস্থিত রয়েছে এবং সবকিছু আশ্চর্যরূপে কাজ করে। ছাড়া ...

আমি যখন প্রথমবারের মতো একটি রিবুটটি অনুসরণ করে অ্যাপটি চালিত করি এবং তারপরে ইউএসবি ডিভাইসটি প্লাগ করি তখন আমি একটি পপআপ উইন্ডো পেয়ে যাচ্ছি "অ্যাপ্লিকেশনটির অ্যাপ্লিকেশনটিকে ইউএসবি ডিভাইস অ্যাক্সেস করার অনুমতি দিন? [] এই ইউএসবি ডিভাইসের জন্য ডিফল্টরূপে ব্যবহার করুন OK ঠিক আছে বাতিল করুন" এবং এটি ডিভাইসটি ব্যবহার শুরু করার আগে আমাকে ঠিক আছে আলতো চাপতে হবে।

আমাকে ব্যবহারকারীর নিশ্চয়তা বন্ধ করতে হবে যাতে অ্যাপটি সরাসরি ডিভাইসটি ব্যবহার করতে পারে। আমি এটা কিভাবে করবো? আমি স্ক্রিনের বোতামটি ট্যাপ করে ব্যবহারকারীকে সিমুলেট করার জন্য কিপ্রেস জেনারেটরটি ব্যবহার সম্পর্কে কিছু পরামর্শ পেয়েছি তবে আমি সেই ধরণের পদ্ধতির এড়াতে পছন্দ করি এবং জিনিসগুলি সেট আপ করতে চাই যাতে নিশ্চিতকরণের অনুরোধটি কেবল না ঘটে।

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

একটি সম্পর্কিত সমস্যা: "এই ইউএসবি ডিভাইসটির জন্য ডিফল্টরূপে ব্যবহার করুন" বাক্সটি টিক দিয়ে সহায়তা করতে দেখা যাচ্ছে না - যদি আমি ডিভাইসটি আনপ্লাগ এবং পুনরায় প্লাগ করি তবে আমি আবার নিশ্চিতকরণ প্রম্পটটি পাই। আমি এই পরিস্থিতিতে লক্ষ্য করেছি যে / dev / bus / usb / 001 / এ থাকা ডিভাইস নম্বরটি প্রতিবার আনপ্লাগ এবং পুনরায় প্লাগ (001, 002, 003 ইত্যাদি) পরিবর্তন করে যা সম্ভবত এই নির্দিষ্ট সমস্যাটির ব্যাখ্যা দেয়।


আপনি যদি অ্যাপ্লিকেশনটিকে / সিস্টেম / অ্যাপে স্থাপন করেন তবে কী হবে? আপনি সিস্টেম স্বাক্ষর সহ এবং না করে এটি চেষ্টা করতে পারেন। আমি এটিকে একটি মন্তব্য হিসাবে লিখছি কারণ (ক) আমি এটি চেষ্টা করি নি, এবং (খ) এই স্থাপনার মডেলটি আপনার কাছে উপলব্ধ কিনা তা আমি জানি না।
রব প্রধাম

উত্তর:


10

এই প্রশ্নোত্তরটি মূলত
/programming//a/15151075/588476 এর সদৃশ
একটি উদাহরণ প্রোগ্রামের জন্য উপরের লিঙ্কটি এবং আরও গভীরতার আলোচনায় দেখুন।

আমি যতদূর জানি, ইউএসবি অনুমতি বক্স পপআপ পাওয়ার দুটি উপায় রয়েছে:

  1. আপনার অ্যাপ্লিকেশন থেকে স্পষ্টভাবে অনুমতি জন্য অনুরোধ করুন UsbManager.requestPermission (...)
  2. আপনার অ্যাকসেসরিতে একটি অভিপ্রায়-ফিল্টার নিবন্ধ করুন এবং ডিভাইসটি সংযুক্ত থাকা অবস্থায় সিস্টেমকে অনুমতি চাইতে দিন

1 এর ক্ষেত্রে আমি খুঁজে পেয়েছি যে অনুমতিটি মনে করার জন্য পপআপে থাকা চেকবক্সটির কোনও প্রভাব নেই।

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

আমি নিশ্চিত নই যে আপনার ডিভাইসের সাথে সম্পর্কিত কোনও বাগ / ডি / বাস / ইউএসবি / 001 এবং তারপরে 002 ইত্যাদি দেখানো হয়েছে কিনা - যদি আপনি অভিপ্রায়-ফিল্টারটি ব্যবহার করছেন কিনা তা আমাকে জানাবেন, মনে রাখবেন যে চেকবক্সটি ছাড়া কিছু করনা.

আপনি কোনওভাবে অনুমতি পপআপ এড়াতে পারবেন এমন কোনও উপায় আমার জানা নেই। আপনার সন্দেহ মতো অ্যান্ড্রয়েড কোডটি খনন না করে এটি করার কোনও উপায় নেই বলে আমি সন্দেহ করি।


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

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

এটি ওয়ানএম 7 ইঞ্চি ট্যাবলেট যা ওয়ান্ডারমিডিয়া ডাব্লুএম 8850-মাঝারি এসওএম এর ভিত্তিতে অ্যান্ড্রয়েড 4.0.3 এর স্বাদ ব্যবহার করে।
কেব্রো

ইন্টেন্ট-ফিল্টারগুলি কেবলমাত্র বর্তমান বুট সেশনের জন্য কাজ করছে। হ্যাঁ আমি আমার ফোনে একটি ইউএসবি ডিভাইস প্লাগ করি এবং এটি স্বয়ংক্রিয়ভাবে অনুমতি দেয়
user924

7

আমার মন্তব্যটির আরও ਅੱਗੇ, আমি অন্তর্নিহিত অ্যান্ড্রয়েড কোডটি দেখেছি।

আমার একটি সম্ভাব্য উত্তর আছে তবে চারটির চেয়ে কম বড় সাবধানতা এবং বাধা নেই:

  1. আমি এটি চেষ্টা করে দেখিনি, কারণ আমার হাতে কোনও উপযুক্ত ইউএসবি ডিভাইস নেই।
  2. আপনার একটি নতুন অনুমতি প্রয়োজন
  3. অনুমতিটির প্রয়োজন হয় আপনি একটি সিস্টেম অ্যাপ
  4. কোডটির সর্বজনীন এপিআইতে নেই এমন কিছুতে অ্যাক্সেসের প্রয়োজন

বাজারের পরে সাধারণ অ্যাপ্লিকেশন মোতায়েন করা থাকলে এ সম্পর্কে ভুলে যান!

প্রথম পূর্বশর্তটি আপনার MANAGE_USBঅনুমতি রয়েছে। এখানে বর্ণিত হয়েছে

তবে এর জন্য পূর্বশর্তগুলি হ'ল আপনি সিস্টেম কী দিয়ে স্বাক্ষর করেন এবং আপনি আপনার অ্যাপ্লিকেশনটিকে / সিস্টেম / অ্যাপ্লিকেশনটিতে ইনস্টল করেন।

যাইহোক, আপনি যদি এটির সাথে ঠিক থাকেন তবে এখানে কিছু কোড রয়েছে:

   IBinder b = ServiceManager.getService(USB_SERVICE);
   IUsbManager service = IUsbManager.Stub.asInterface(b);
   service.grantDevicePermission(mDevice, uid);

mDevice প্রথম থেকেই ডিভাইস

uidআপনার নিজস্ব অ্যাপের ইউআইডি এবং আপনি এটি সন্ধান করতে পারেন। কীভাবে এটি করা যায় তার একটি উদাহরণ এখানে প্রথম উত্তর ।

সব ভালো? নং ServiceManagerহল android.os.ServiceManagerএবং এইভাবে একটি পাবলিক এপিআই নয়। এটি, এই উদাহরণস্বরূপ, IUsbManagerপরিষেবাতে আপনার হাত পাওয়ার উপায় way এখন, প্রায় পেয়ে যে আমার উত্তর সুযোগ পরলোক হল; পুরানো দিনগুলিতে আপনি প্রতিবিম্ব ব্যবহার করতে পারেন, তবে আপনি এখনও পারবেন কিনা তা আমি জানি না।

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

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