নোটিফিকেশন প্যানেলটি টেনে নামানোর সময় অ্যান্ড্রয়েডে কোনও ভিডিও (মিডিয়াপ্লেয়ার) অ্যাপ্লিকেশন বিরতি দেওয়া কি সম্ভব?


11

ধরুন আমার কাছে এওএসপি উত্স কোড রয়েছে, বিজ্ঞপ্তি প্যানেলটি নীচে টেনে আনার সময় আমি অগ্রভাগে অ্যাপ্লিকেশনটিকে কীভাবে বিরতি দিতে পারি? আমি গুগল করেছি এবং একটি অ্যাপ্লিকেশনটি ইভেন্টটি শুনতে onWindowFocusChangeএবং সক্রিয়ভাবে কিছু পদক্ষেপ নিতে পারে তা জানতে পেরেছি, তবে বিজ্ঞপ্তি প্যানেলটি নীচে টানানোর সময় আমি কোনও অ্যাপ্লিকেশনকে কীভাবে বিরতি দিতে পারি , যথাক্রমে প্রতিটি অ্যাপ্লিকেশনটি সংশোধন না করে (যা অবৈজ্ঞানিক)?

onPauseসিস্টেমুআই প্রক্রিয়া থেকে আমি কোনও ফোরগ্রাউন্ড অ্যাপের ফাংশনটি কল করতে পারি এমন কোনও উপায় আছে কি ?


- আপনার সব প্রশ্নের যোগ করা উত্তর এই দেখতে stackoverflow.com/a/59589825/9640177
mayank1513

বিজ্ঞপ্তিটি নীচে টানলে কী স্বচ্ছ ক্রিয়াকলাপ শুরু করছে। এটি বর্তমান ক্রিয়াকলাপের অনপস পদ্ধতিটি কল করবে। ফোকাসের অনুরোধের কারণে মিডিয়া প্লেব্যাকটি বিরতি সৃষ্টি করবে
mayank1513

উত্তর:


10

আপনি বিজ্ঞপ্তি প্যানেল টান সনাক্তকরণের জন্য নীচের পদ্ধতিটি ব্যবহার করতে পারেন,

আপনার ম্যানিফেস্ট ফাইলে

 <uses-permission android:name="android.permission.EXPAND_STATUS_BAR" />

আপনার ক্রিয়াকলাপে ওভাররাইড করুন onWindowFocusChanged()এবং নীচের কোডটি লিখুন।

এটি অনুমতি ব্যবহার করে

@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();
        }
    }
}

তারপরে অডিও ফোকাসের জন্য আপনার অ্যাপ্লিকেশনটির অনুরোধে নীচের লিঙ্কটি দেখুন

https://developer.android.com/guide/topics/media-apps/audio-focus#java

এটি অন্যান্য সমস্ত অ্যাপ্লিকেশনগুলির জন্য অডিও অ্যাক্সেসকে বিরতি দেবে।


1
@ ঝাংক্সাওচেন অনুগ্রহ ২৪ ঘন্টার মধ্যে শেষ হচ্ছে, আপনি ইতিমধ্যে এটি হারিয়ে ফেলেছেন এবং যদি এটির মেয়াদ উত্তীর্ণ হয়, এটি নষ্ট হয়ে যায় !!
আকাশ দুবে

3

সমাধানের দুটি অংশ রয়েছে

  1. বিজ্ঞপ্তি প্যানেল টান সনাক্ত করা হচ্ছে
  2. কোনও মিডিয়া প্লে অ্যাপ্লিকেশন বিরতি

বিজ্ঞপ্তি প্যানেল টান সনাক্তকরণের জন্য আপনি আকাশের প্রস্তাবিত পদ্ধতি বা লালিথের দ্বারা এখানে একই কোড ব্যবহার করতে পারেন ।

আপনার ম্যানিফেস্ট ফাইলে

<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" />

এটি দেখুন এবং আমি স্বচ্ছ ক্রিয়াকলাপ তৈরির ব্যক্তিগতভাবেও পরীক্ষা করেছি।

এর অর্থ হ'ল উপরের ক্রিয়াকলাপটি হ'ল আপনার স্বচ্ছ ক্রিয়াকলাপ এবং অন্য ক্রিয়াকলাপের অনপস পদ্ধতিটি স্বাভাবিকভাবেই ডাকা হবে। নোটিফিকেশন প্যানেলটি ভেঙে যাওয়ার পরে আপনি এই ক্রিয়াকলাপটি ধ্বংস করতে পারেন। এবং নিরাপদে থাকাকালীন আপনি এমন একটি খালি ভিউ তৈরি করে স্পর্শ শ্রোতাকেও অন সেট করতে পারেন যা স্ক্রিনটি অনুভব করে যা স্পর্শে কার্যকলাপটি ধ্বংস করতে পারে।


3

ধরে নিই যে অ্যান্ড্রয়েড ডিভাইস ডিফল্ট মিডিয়াপ্লেয়ার ব্যবহার করে , এই রাজ্য চিত্র অনুসারে , আপনি দেশীয় pauseএবং stopরাজ্যটি ব্যবহার করতে পারেন ।

আপনি যদি কেবল শব্দ বন্ধ করতে চান না, আপনি সম্ভবত একটি ভলিউমঅটোমেশন ব্যবহার করে শব্দটির ভলিউম পরিবর্তন করতে পারেন ?

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