অ্যাডবি কমান্ডের মাধ্যমে (বা অফ) ইউএসবি ভর স্টোরেজ টগলিং করা


17

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

adb shell am start -n android/com.android.server.ShutdownActivity

আমি এখন ইউএসবি ভর স্টোরেজ সমর্থন কীভাবে চালু এবং বন্ধ করব তা বোঝার চেষ্টা করছি। আমি নিম্নলিখিত কমান্ডের মাধ্যমে ইউএসবি স্টোরেজ ক্রিয়াকলাপ উইন্ডোটি পপ আপ করে চলেছি:

adb shell am start -n com.android.systemui/.usb.UsbStorageActivity

দুর্ভাগ্যক্রমে আমি কীভাবে সমতুল্য "অভিপ্রায়" আসলে "আনমাউন্ট" বা "ভাগ করা" ভাগ করে নেওয়া ভলিউম (বা "মাউন্ট" বা "বিষয়টির জন্য এটি" ভাগ করে ") পাঠাতে পারি তা বুঝতে সক্ষম হইনি। নিম্নলিখিত কমান্ডটি কিছুই করে না:

adb shell am start -n com.android.systemui/.usb.UsbStorageActivity -a android.intent.action.MEDIA_UNSHARED file:///mnt/sdcard

আমি কি ভুল করছি? কোনও অ্যান্ড্রয়েড ডিভাইসের অভ্যন্তরীণ স্টোরেজ মাউন্ট / আনমাউন্ট করার যাদু জাগ্রত কী?

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

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

adb shell setprop sys.usb.config mass_storage

খুব ভালভাবে গবেষণা করা একটি প্রশ্ন, আমি যদি এটি দুটিবার উপস্থাপন করতে পারি! আপনার প্রচেষ্টা এবং যারা সহায়ক এবং ইতিমধ্যে কাজ কমান্ড ভাগ করে নেওয়ার জন্য ধন্যবাদ! উদাহরণস্বরূপ :) ক্রসিং আঙুলগুলি কেউ হারিয়ে যাওয়া টুকরোগুলি নিয়ে আসতে পারে, কারণ এটি সত্যই কার্যকর হবে!
ইজি

উত্তর:


9

হায়, UsbStorageActivityইউএসবি ভর স্টোরেজ সক্ষম এবং অক্ষম করার উদ্দেশ্যে কোনও উদ্দেশ্য ব্যবহার করে না, সুতরাং এটি ব্যবহার করে এটি অর্জন করার কোনও উপায় নেই am। পরিবর্তে এটি ফাংশনগুলিকে কল করে StorageManager.enableUsbMassStorageএবং `StorageManager.disableUsbMassStorageএটির কাজটি করে। এই ফাংশনগুলি ফ্রেমওয়ার্কে লুকানো আছে, এটি করার জন্য কোনও অ্যাপ্লিকেশন লেখা সম্ভব নয়। যতদূর আমি জানি, এটি করার কোনও বিদ্যমান আদেশ নেই।

কোনও অ্যাপ্লিকেশন লিখিত হতে পারে যা একটি কমান্ড-লাইন ইন্টারফেস সরবরাহ করে এবং MountServiceতার setUsbMassStorageEnabledকার্যকারিতাটি কল করতে সীমাবদ্ধ সিস্টেম পরিষেবা ব্যবহার করে তবে এটি এই সাইটের পক্ষে বিষয়বস্তু হতে পারে।


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

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

আপনি serviceসিএলআই সরঞ্জামটি চেষ্টা করতে পারেন যা সিস্টেম পরিষেবা পদ্ধতিগুলিকে কল করতে পারে।
লায়ো লাম

5


ভর স্টোরেজ এবং এর কাজগুলিকে সক্ষম ও অক্ষম করার জন্য আমি "স্টোরেজম্যানেজ.আনেবল ইউএসবিম্যাসস্টোরেজ" এবং "স্টোরেজমেনেজ.ডিজিয়েবল ইউএসবম্যাস স্টোরেজ" চেষ্টা করেছি।
ধন্যবাদ।

এই পদ্ধতিগুলি ব্যক্তিগত পদ্ধতি। সুতরাং, আপনি যদি সেগুলি ব্যবহার করতে চান তবে আপনি এটি প্রতিবিম্বের মাধ্যমে জোরে জোরে জোরে জোরে জোরে জোরে জোরে জোরে জোরে জোরে তা করতে পারেন। স্টোরেজ ম্যানেজারটি পেতে, আপনি গিটিসিস্টেম সার্ভিস (জাভা.লাং.স্ট্রিং) পদ্ধতিটি ব্যবহার করতে পারেন যা কার্যক্রমে অন্তর্ভুক্ত রয়েছে:

 StorageManager storage = (StorageManager)getApplicationContext().getSystemService(STORAGE_SERVICE);
 Method method = storage.getClass().getDeclaredMethod("enableUsbMassStorage");
 method.setAccessible(true); 
 Object r = method.invoke(storage);

এবং ভর স্টোরেজ অক্ষম করতে:

StorageManager storage = (StorageManager) getApplicationContext().getSystemService(STORAGE_SERVICE);
Method method = storage.getClass().getDeclaredMethod("disbleUsbMassStorage");
method.setAccessible(true);
Object r = method.invoke(storage);

আমির ব্র্যান্ড- আমি এই পদ্ধতিটি ব্যবহার করার চেষ্টা করেছি তবে আমি আমার ইউএসবি স্টোরেজটি অক্ষম করতে পারছি না। এটা কি আপনার সাথে কাজ করছে? যদি হ্যাঁ, আপনি দয়া করে আমাকে সাহায্য করতে পারেন। ধন্যবাদ
খান্না

হাই খান্না শিওর সমস্যা নেই. দয়া করে সমস্যার সাথে নেটমির2002@gmail.com আমাকে মেইল ​​প্রেরণ করুন এবং আমি সমাধানটি সন্ধান করার চেষ্টা করব।
আমির ব্র্যান্ড
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.