অ্যান্ড্রয়েড 8.0 ওরিও দিয়ে আপডেট করুন
যদিও প্রশ্নটি প্রাথমিকভাবে অ্যান্ড্রয়েড এল সমর্থনের জন্য জিজ্ঞাসা করা হয়েছিল, তবুও লোকেরা এই প্রশ্ন এবং উত্তরটিকে আঘাত করছে বলে মনে হচ্ছে, তাই অ্যান্ড্রয়েড 8.0 ওরিওতে প্রবর্তিত উন্নতিগুলি বর্ণনা করার জন্য এটি মূল্যবান। পশ্চাদপটে সামঞ্জস্যপূর্ণ পদ্ধতিগুলি এখনও নীচে বর্ণিত।
কী বদলে গেল?
অ্যান্ড্রয়েড 8.0 ওরিও দিয়ে শুরু করে , PHONE অনুমতি গোষ্ঠীতে ANSWER_PHONE_CALLS অনুমতিও রয়েছে । অনুমোদনের নাম অনুসারে, এটি ধরে রাখা আপনার অ্যাপ্লিকেশনটিকে প্রতিচ্ছবি ব্যবহার করে বা ব্যবহারকারীর অনুকরণ ব্যবহার করে সিস্টেমের আশেপাশে কোনও হ্যাকিং ছাড়াই যথাযথ এপিআই কলের মাধ্যমে প্রোগ্রামিং পদ্ধতিতে ইনকামিং কলগুলি গ্রহণ করতে দেয়।
আমরা কীভাবে এই পরিবর্তনটি ব্যবহার করব?
আপনি যদি পুরানো অ্যান্ড্রয়েড সংস্করণগুলি সমর্থন করে থাকেন তবে রানটাইমের সময় আপনার সিস্টেম সংস্করণটি পরীক্ষা করা উচিত যাতে those পুরানো অ্যান্ড্রয়েড সংস্করণগুলির জন্য সমর্থন বজায় রেখে আপনি এই নতুন এপিআই কলটি সজ্জিত করতে পারেন। নতুন সময়ের অ্যান্ড্রয়েড সংস্করণগুলির মান অনুসারে রান-টাইমের সময় সেই নতুন অনুমতি পাওয়ার জন্য রান সময়ে আপনাকে অনুরোধের অনুমতিগুলি অনুসরণ করা উচিত ।
অনুমতি প্রাপ্ত থাকার পর, আপনার অ্যাপ্লিকেশন সহজভাবে ডাকতে হয়েছে TelecomManager এর acceptRingingCall পদ্ধতি। একটি বেসিক প্রার্থনা নিম্নলিখিত হিসাবে প্রদর্শিত হচ্ছে:
TelecomManager tm = (TelecomManager) mContext
.getSystemService(Context.TELECOM_SERVICE);
if (tm == null) {
throw new NullPointerException("tm == null");
}
tm.acceptRingingCall();
পদ্ধতি 1: টেলিফোনি ম্যানেজ.আনসেটর রিংকলিং ()
কখন আপনার ডিভাইসে সীমাহীন নিয়ন্ত্রণ থাকবে For
এটা কি?
এখানে টেলিফোনিম্যানেজ.আনসওয়ার রিংকলিং () রয়েছে যা একটি লুকানো, অভ্যন্তরীণ পদ্ধতি। এটি ITelephony.answerRingingCall () এর জন্য একটি সেতু হিসাবে কাজ করে যা আন্তঃবিশ্ব সম্পর্কে আলোচনা করা হয়েছিল এবং শুরুতে আশাব্যঞ্জক বলে মনে হচ্ছে। এটি 4.4.2_r1 এ উপলব্ধ নয় কারণ এটি কেবল অ্যান্ড্রয়েড 4.4 কিটকাট ( 4.4.3_r1-এ লাইন 1537 ) এর জন্য প্রতিশ্রুতি 83da75 ডি- তে এবং পরে ললিপপের ( 5.0.0_r1-তে লাইন 3138 ) কমিট f1e1e77 এ "পুনঃপ্রবর্তন" করা হয়েছিল গিট ট্রি কাঠামোগত ছিল। এর অর্থ হ'ল আপনি যদি ললিপপ সহ কেবলমাত্র ডিভাইসগুলিকে সমর্থন করেন না, যা সম্ভবত এখনই এর ক্ষুদ্র বাজারের অংশীদারের উপর ভিত্তি করে একটি খারাপ সিদ্ধান্ত, আপনি যদি এখনও এই রাস্তায় নেমে যান তবে আপনাকে ফ্যালব্যাক পদ্ধতি সরবরাহ করতে হবে।
আমরা কীভাবে এটি ব্যবহার করব?
যেহেতু প্রশ্নে থাকা পদ্ধতিটি এসডিকে অ্যাপ্লিকেশনগুলির ব্যবহার থেকে লুকানো রয়েছে তাই রানটাইমের সময় আপনার গতিশীলভাবে পরীক্ষা করতে এবং পদ্ধতিটি ব্যবহার করার জন্য আপনাকে প্রতিচ্ছবি ব্যবহার করতে হবে । আপনি যদি প্রতিবিম্বের সাথে পরিচিত না হন তবে আপনি তাড়াতাড়ি পড়তে পারেন প্রতিচ্ছবি কী এবং এটি কার্যকর কেন? । আপনি ট্রেইলে স্পেসিফিক্সগুলির আরও গভীর খনন করতে পারেন : যদি আপনি এটি করতে আগ্রহী হন তবে প্রতিচ্ছবি এপিআই ।
এবং কোডটি কীভাবে দেখায়?
final String LOG_TAG = "TelephonyAnswer";
TelephonyManager tm = (TelephonyManager) mContext
.getSystemService(Context.TELEPHONY_SERVICE);
try {
if (tm == null) {
throw new NullPointerException("tm == null");
}
tm.getClass().getMethod("answerRingingCall").invoke(tm);
} catch (Exception e) {
Log.e(LOG_TAG, "Unable to use the Telephony Manager directly.", e);
}
এটা সত্য হতে খুব ভাল!
আসলে, একটি সামান্য সমস্যা আছে। এই পদ্ধতি সম্পূর্ণ ক্রিয়ামূলক হওয়া উচিত, কিন্তু নিরাপত্তা ম্যানেজার রাখা কলারের চায় android.permission.MODIFY_PHONE_STATE । এই অনুমতিটি কেবলমাত্র সিস্টেমের আংশিক নথিভুক্ত বৈশিষ্ট্যের ক্ষেত্রে রয়েছে কারণ তৃতীয় পক্ষগুলি এটির স্পর্শ করবে না বলে আশা করা যায় (আপনি এটির জন্য ডকুমেন্টেশন থেকে দেখতে পারেন)। আপনি <uses-permission>
এটির জন্য একটি যুক্ত করার চেষ্টা করতে পারেন তবে এটি কোনও ভাল করবে না কারণ এই অনুমতিটির সুরক্ষা স্তর হ'ল স্বাক্ষর | সিস্টেম ( 5.0.0_r1 তে মূল / অ্যান্ড্রয়েড ম্যানিফেস্টের 1201 লাইনটি দেখুন )।
আপনি ইস্যু 34785 পড়তে পারেন : অ্যান্ড্রয়েড আপডেট করুন: প্রোটেকশন লেভেল ডকুমেন্টেশন যা 2012 সালে ফিরে তৈরি হয়েছিল তা দেখতে যে আমরা নির্দিষ্ট "পাইপ সিনট্যাক্স" সম্পর্কে বিশদটি অনুপস্থিত রয়েছি, তবে চারপাশের পরীক্ষা-নিরীক্ষার মাধ্যমে মনে হয় এটি অবশ্যই 'ও' হিসাবে কাজ করবে যা সমস্ত অর্থ অনুমতি প্রদানের জন্য নির্দিষ্ট পতাকাগুলি পূরণ করতে হবে। এই অনুমানের অধীনে কাজ করা, এর অর্থ হ'ল আপনার অবশ্যই আবেদন করা উচিত:
সিস্টেম অ্যাপ্লিকেশন হিসাবে ইনস্টল করা হয়েছে।
এটি সূক্ষ্ম হওয়া উচিত এবং ব্যবহারকারীদের পুনরুদ্ধারে একটি জিপ ব্যবহার করে ইনস্টল করতে বলার মাধ্যমে যেমন সম্পন্ন করা যেতে পারে যেমন কাস্টম রমগুলিতে গুগল অ্যাপ্লিকেশন রুট করার সময় বা ইনস্টল করার সময় যা ইতিমধ্যে প্যাকেজড নেই।
ফ্রেমওয়ার্ক / বেস ওরফে সিস্টেম, আরএফ আরএফ হিসাবে একই স্বাক্ষর সহ স্বাক্ষরিত।
এখানেই সমস্যাগুলি পপ আপ হয়। এটি করার জন্য, ফ্রেমওয়ার্ক / বেসকে স্বাক্ষর করার জন্য আপনার কীগুলি ব্যবহার করতে হবে। আপনাকে শুধুমাত্র নেক্সাস ফ্যাক্টরি চিত্রগুলির জন্য গুগলের কীগুলিতে অ্যাক্সেস পেতে হবে না, তবে আপনাকে অন্য সমস্ত OEMs এবং রম বিকাশকারীদের কীগুলিতে অ্যাক্সেস পেতে হবে। এটি প্রশংসনীয় বলে মনে হচ্ছে না তাই আপনি কাস্টম রম তৈরি করে এবং আপনার ব্যবহারকারীদের এটিতে স্যুইচ করতে বলেছেন (যা কঠিন হতে পারে) অথবা অনুমতি সুরক্ষা স্তরটি বাইপাস করা যেতে পারে এমন কোনও অন্বেষণ সন্ধানের মাধ্যমে আপনি সিস্টেম কীগুলির সাথে আপনার অ্যাপ্লিকেশনটিতে স্বাক্ষর করতে পারেন so (যা হার্ডও হতে পারে)।
অতিরিক্তভাবে, এই আচরণটি ইস্যুটি 34792 ইস্যু সম্পর্কিত বলে মনে হয় : অ্যান্ড্রয়েড জেলি বিন / 4.1: android.permission.READ_LOGS আর কাজ করে না যা একই সুরক্ষা স্তরটিকে একটি অনিবন্ধিত বিকাশের পতাকার পাশাপাশি ব্যবহার করে util
টেলিফোনি ম্যানেজারের সাথে কাজ করা ভাল শোনাচ্ছে তবে আপনি যদি যথাযথ অনুমতি না পান যা অনুশীলনে করা এত সহজ নয় তবে কাজ করবে না।
অন্যান্য উপায়ে টেলিফোনি ম্যানেজার ব্যবহার সম্পর্কে কী?
দুঃখের বিষয়, শীতল সরঞ্জামগুলি ব্যবহার করার জন্য আপনাকে Android.permission.MODIFY_PHONE_STATE ধরে রাখা দরকার বলে মনে হচ্ছে যার ফলস্বরূপ আপনি সেই পদ্ধতিগুলিতে অ্যাক্সেস পেতে খুব কঠিন সময় কাটাচ্ছেন।
পদ্ধতি 2: পরিষেবা কল করুন সার্ভিস কোডে
কখন আপনি পরীক্ষা করতে পারবেন যে ডিভাইসে চলমান বিল্ডটি নির্দিষ্ট কোড দিয়ে কাজ করবে।
টেলিফোনি ম্যানেজারের সাথে ইন্টারঅ্যাক্ট করতে সক্ষম না হয়ে service
এক্সিকিউটেবলের মাধ্যমে পরিষেবাটির সাথে যোগাযোগের সম্ভাবনাও রয়েছে ।
কিভাবে কাজ করে?
এটি মোটামুটি সহজ, তবে অন্যদের তুলনায় এই রুটটি সম্পর্কে আরও কম ডকুমেন্টেশন রয়েছে। আমরা নিশ্চিত জানি যে এক্সিকিউটেবল দুটি আর্গুমেন্ট গ্রহণ করে - পরিষেবার নাম এবং কোড।
আমরা যে পরিষেবা নামটি ব্যবহার করতে চাই তা হ'ল ফোন ।
এটি দৌড় দিয়ে দেখা যায় service list
।
আমরা যে কোডটি ব্যবহার করতে চাইছি তা 6 টির মতো মনে হলেও এটি এখন 5 এর মতো ।
দেখে মনে হচ্ছে এটি আইবিন্ডারের উপর ভিত্তি করে তৈরি হয়েছে many এখন অনেক সংস্করণের জন্য এখনই ( 1.5_r4 থেকে 4.4.4_r1 ) এফআইআরআইএসসিএলএলআলআরআরআআআআআআআআআআআআআআআআআআআআআআআ । ললিপো যেহেতু চারপাশে একটি বিশাল আপডেট, এটি এখানে বোধগম্য অভ্যন্তরীণও বোধগম্য।
এই একটি আদেশের সঙ্গে ফলাফল service call phone 5
।
আমরা কীভাবে এই প্রোগ্রামটি ব্যবহার করব?
জাভা
নিম্নলিখিত কোডটি ধারণার প্রমাণ হিসাবে কাজ করার জন্য করা মোটামুটি বাস্তবায়ন। আপনি আসলে এগিয়ে যান এবং এই পদ্ধতি ব্যবহার করতে চান তাহলে, আপনি সম্ভবত চেক আউট করতে চান সমস্যা-মুক্ত su কমান্ড ব্যবহারের জন্য নির্দেশাবলী এবং সম্ভবত আরো সম্পূর্ণরূপে বিকশিত স্যুইচ libsuperuser দ্বারা Chainfire ।
try {
Process proc = Runtime.getRuntime().exec("su");
DataOutputStream os = new DataOutputStream(proc.getOutputStream());
os.writeBytes("service call phone 5\n");
os.flush();
os.writeBytes("exit\n");
os.flush();
if (proc.waitFor() == 255) {
}
} catch (IOException e) {
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
প্রকাশ
<uses-permission android:name="android.permission.ACCESS_SUPERUSER"/>
এর জন্য কি সত্যিই রুট অ্যাক্সেসের প্রয়োজন?
দুঃখজনকভাবে, এটা মনে হচ্ছে। আপনি এটিতে রানটাইম.এক্সেক ব্যবহার করার চেষ্টা করতে পারেন তবে আমি সেই রুটের সাথে কোনও ভাগ্য পেতে সক্ষম হইনি।
এটা কতটা স্থিতিশীল?
আপনি খুশি খুশি। ডকুমেন্টেড না হওয়ার কারণে এটি উপরের সেরকম কোড পার্থক্য দ্বারা চিত্রিত হিসাবে বিভিন্ন সংস্করণে বিভক্ত হতে পারে। পরিষেবার নামটি সম্ভবত বিভিন্ন বিল্ডের জন্য ফোন থাকা উচিত , তবে আমরা জানি যে, কোডের মান একই সংস্করণের একাধিক বিল্ডে পরিবর্তিত হতে পারে (এর মাধ্যমে অভ্যন্তরীণ পরিবর্তনগুলি, বলুন, ওএম এর ত্বক) পরিবর্তিতভাবে ব্যবহৃত পদ্ধতিটি ভেঙে দিতে পারে। অতএব এটি একটি নেক্সাস 4 (মকো / অনুষ্ঠান) এ পরীক্ষাটি হয়েছে বলে উল্লেখযোগ্য। আমি ব্যক্তিগতভাবে এই পদ্ধতিটি ব্যবহারের বিরুদ্ধে আপনাকে পরামর্শ দেব, তবে আমি আরও স্থিতিশীল পদ্ধতিটি খুঁজে পাচ্ছি না বলে আমি বিশ্বাস করি এটিই সেরা শট।
আসল পদ্ধতি: হেডসেট কীকোড উদ্দেশ্যগুলি
আপনি যখন স্থায়ী হতে হবে যখন সময় জন্য।
নিম্নলিখিত বিভাগটি রিলে সি দ্বারা এই উত্তর দ্বারা দৃ strongly়ভাবে প্রভাবিত হয়েছিল ।
আসল প্রশ্নটিতে পোস্ট করা সিমুলেটেড হেডসেট অভিপ্রায় পদ্ধতিটি যেমন প্রত্যাশা করা হয়েছিল ঠিক তেমনই সম্প্রচারিত হয়েছে বলে মনে হচ্ছে, তবে এটি কলটির উত্তর দেওয়ার লক্ষ্য অর্জন করে বলে মনে হচ্ছে না। এই কোডগুলি হ্যান্ডেল করা উচিত এমন জায়গায় কোড রয়েছে বলে মনে হচ্ছে, তাদের কেবল যত্ন নেওয়া হচ্ছে না, যার অর্থ এই পদ্ধতির বিপরীতে কোনও রকম নতুন প্রতিরোধ ব্যবস্থা থাকতে হবে। লগটি তেমন আগ্রহের কিছু দেখায় না এবং আমি ব্যক্তিগতভাবে বিশ্বাস করি না যে এর জন্য অ্যান্ড্রয়েড উত্সের মাধ্যমে খনন করা সার্থক হবে কেবল গুগলের সামান্য পরিবর্তন আনার সম্ভাবনা যা কোনওভাবেই ব্যবহৃত পদ্ধতিটি সহজেই ভেঙে দেয়।
এখনই কি কিছু করার আছে?
আচরণটি নির্বাহযোগ্য ইনপুটটি ব্যবহার করে ধারাবাহিকভাবে পুনরুত্পাদন করা যেতে পারে। এটি একটি কীকোড আর্গুমেন্ট গ্রহণ করে, যার জন্য আমরা কেবল কী- সেভেন্টে . KEYCODE_HEADSETHOOK এ পাস করি । পদ্ধতিটি এমনকি সাধারণ জনগণের জন্য সাধারণ ব্যবহারের ক্ষেত্রে উপযুক্ত করার জন্য রুট অ্যাক্সেসের প্রয়োজন হয় না, তবে পদ্ধতিতে একটি ছোট্ট অসুবিধা রয়েছে - হেডসেট বোতাম টিপুন ইভেন্টটির অনুমতি প্রয়োজনের জন্য নির্দিষ্ট করা যায় না, অর্থাত এটি বাস্তবের মতো কাজ করে meaning পুরো চেইনের মধ্য দিয়ে বাটন টিপুন এবং বুদবুদগুলি, যার অর্থ আপনি কখন বাটন প্রেসের অনুকরণ করবেন তা সম্পর্কে সতর্ক থাকতে হবে, উদাহরণস্বরূপ, উচ্চতর অগ্রাধিকারের কেউ যদি হ্যান্ডেল করার জন্য প্রস্তুত না হয় তবে সঙ্গীত প্লেয়ারকে প্লেব্যাক শুরু করতে ট্রিগার করুন ঘটনা.
কোড?
new Thread(new Runnable() {
@Override
public void run() {
try {
Runtime.getRuntime().exec("input keyevent " +
Integer.toString(KeyEvent.KEYCODE_HEADSETHOOK));
} catch (IOException e) {
String enforcedPerm = "android.permission.CALL_PRIVILEGED";
Intent btnDown = new Intent(Intent.ACTION_MEDIA_BUTTON).putExtra(
Intent.EXTRA_KEY_EVENT, new KeyEvent(KeyEvent.ACTION_DOWN,
KeyEvent.KEYCODE_HEADSETHOOK));
Intent btnUp = new Intent(Intent.ACTION_MEDIA_BUTTON).putExtra(
Intent.EXTRA_KEY_EVENT, new KeyEvent(KeyEvent.ACTION_UP,
KeyEvent.KEYCODE_HEADSETHOOK));
mContext.sendOrderedBroadcast(btnDown, enforcedPerm);
mContext.sendOrderedBroadcast(btnUp, enforcedPerm);
}
}
}).start();
tl; ডা
অ্যান্ড্রয়েড 8.0 ওরিও এবং তার পরে এর জন্য একটি দুর্দান্ত পাবলিক এপিআই রয়েছে।
অ্যান্ড্রয়েড 8.0 ওরিওর আগে কোনও পাবলিক এপিআই নেই। অভ্যন্তরীণ এপিআইগুলি অফ-সীমাবদ্ধ বা কেবল কোনও ডকুমেন্টেশন ছাড়াই। আপনার সাবধানতার সাথে এগিয়ে যাওয়া উচিত।