সমাধানের দুটি অংশ রয়েছে
- বিজ্ঞপ্তি প্যানেল টান সনাক্ত করা হচ্ছে
- কোনও মিডিয়া প্লে অ্যাপ্লিকেশন বিরতি
বিজ্ঞপ্তি প্যানেল টান সনাক্তকরণের জন্য আপনি আকাশের প্রস্তাবিত পদ্ধতি বা লালিথের দ্বারা এখানে একই কোড ব্যবহার করতে পারেন ।
আপনার ম্যানিফেস্ট ফাইলে
<uses-permission android:name="android.permission.EXPAND_STATUS_BAR" />
আপনার ক্রিয়াকলাপে উইন্ডোফোকাস চেঞ্জড () ওভাররাইড করুন এবং নীচের কোডটি লিখুন।
@Override
public void onWindowFocusChanged(boolean hasFocus)
{
try
{
if(!hasFocus)
{
Object service = getSystemService("statusbar");
Class<?> statusbarManager = Class.forName("android.app.StatusBarManager");
Method collapse = statusbarManager.getMethod("collapse");
collapse .setAccessible(true);
collapse .invoke(service);
}
}
catch(Exception ex)
{
if(!hasFocus)
{
try {
Object service = getSystemService("statusbar");
Class<?> statusbarManager = Class.forName("android.app.StatusBarManager");
Method collapse = statusbarManager.getMethod("collapse");
collapse .setAccessible(true);
collapse .invoke(service);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
ex.printStackTrace();
}
}
}
দ্বিতীয় অংশের জন্য সমস্ত ভালভাবে ডিজাইন করা মিডিয়া প্লেয়াররা অডিও ফোকাস চেঞ্জ শ্রোতাদের প্রয়োগ করে। সুতরাং সমস্ত মিডিয়া প্লেয়ার অ্যাপ্লিকেশনগুলিকে বিরতি দেওয়ার জন্য আপনি বিজ্ঞপ্তি প্যানেলটি ভেঙে যাওয়ার সাথে সাথে অ্যাপগুলিকে আবার খেলতে দিতে চান কিনা তার উপর নির্ভর করে আপনি অস্থায়ী বা সম্পূর্ণ অডিও ফোকাসের জন্য অনুরোধ করতে পারেন।
নিম্নলিখিত ব্যবহার করুন
AudioManager audioManager = (AudioManager) Context.getSystemService(Context.AUDIO_SERVICE);
playbackAttributes = new AudioAttributes.Builder()
.setUsage(AudioAttributes.USAGE_GAME)
.setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
.build();
focusRequest = new AudioFocusRequest.Builder(AudioManager.AUDIOFOCUS_GAIN)
// replace AUDIOFOCUS_GAIN with AUDIOFOCUS_GAIN_TRANSIENT if you want to pause and again resume when notification panel collapsed
.setAudioAttributes(playbackAttributes)
.setAcceptsDelayedFocusGain(true)
.setOnAudioFocusChangeListener(afChangeListener, handler)
.build();
// to requestAudioFocus and pause other media apps
audioManager.requestAudioFocus(focusRequest);
// to resume again in case you requested AUDIOFOCUS_GAIN_TRANSIENT
audioManager.abandonAudioFocus(afChangeListener);
অডিওফোকাস চ্যাঞ্জলিস্টনার বাস্তবায়ন করতে ভুলবেন না
AudioManager.OnAudioFocusChangeListener afChangeListener = new AudioManager.OnAudioFocusChangeListener() {
@Override
public void onAudioFocusChange(int focusChange) {
// leave this empty if you don't need to handle audio focus for your app
}
};
সিস্টেমুআই প্রক্রিয়া থেকে আমি কোনও ফোরগ্রাউন্ড অ্যাপের অনপেজ ফাংশনটি কল করতে পারি এমন কোনও উপায় আছে কি?
আমি যতদূর গবেষণা করেছি সিস্টেম ইউআই প্রক্রিয়াটি অ্যাক্সেসযোগ্য নয়। তবে, আপনি স্বচ্ছ থিম সহ একটি ক্রিয়াকলাপ চালু করতে পারেন ।
আপনার ম্যানিফেস্টে
<activity android:name=".your.activity" android:theme="@android:style/Theme.Translucent.NoTitleBar" />
এটি দেখুন এবং আমি স্বচ্ছ ক্রিয়াকলাপ তৈরির ব্যক্তিগতভাবেও পরীক্ষা করেছি।
এর অর্থ হ'ল উপরের ক্রিয়াকলাপটি হ'ল আপনার স্বচ্ছ ক্রিয়াকলাপ এবং অন্য ক্রিয়াকলাপের অনপস পদ্ধতিটি স্বাভাবিকভাবেই ডাকা হবে। নোটিফিকেশন প্যানেলটি ভেঙে যাওয়ার পরে আপনি এই ক্রিয়াকলাপটি ধ্বংস করতে পারেন। এবং নিরাপদে থাকাকালীন আপনি এমন একটি খালি ভিউ তৈরি করে স্পর্শ শ্রোতাকেও অন সেট করতে পারেন যা স্ক্রিনটি অনুভব করে যা স্পর্শে কার্যকলাপটি ধ্বংস করতে পারে।