software java.lang.IleglegalStateException: केवल पूर्णस्क्रीन अपारदर्शी गतिविधियां अभिविन्यास का अनुरोध कर सकती हैं




android oreo software free download (15)

एंड्रॉइड 8.0 में संपर्क पुस्तक से संपर्कों को पुनर्प्राप्त करते समय मुझे समस्या का सामना करना पड़ रहा है Oreo java.lang.IllegalStateException: केवल पूर्णस्क्रीन अपारदर्शी गतिविधियां अभिविन्यास का अनुरोध कर सकती हैं

मैं फोन संपर्क पुस्तक से अपनी गतिविधि में संपर्क प्राप्त करने की कोशिश कर रहा हूं और यह लॉलीपॉप, मार्शमलो, नौगेट इत्यादि के लिए बिल्कुल सही काम करता है लेकिन इससे मुझे ओरेओ के लिए त्रुटि मिल जाएगी, कृपया मेरी मदद करें। मेरा कोड नीचे है।

डेमो कोड: -

private void loadContacts() {
            contactAsync = new ContactLoaderAsync();
            contactAsync.execute();
        }

        private class ContactLoaderAsync extends AsyncTask<Void, Void, Void> {
            private Cursor numCursor;

            @Override
            protected void onPreExecute() {
                super.onPreExecute();
                Uri numContacts = ContactsContract.CommonDataKinds.Phone.CONTENT_URI;
                String[] numProjection = new String[]{ContactsContract.CommonDataKinds.Phone.CONTACT_ID, ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME, ContactsContract.CommonDataKinds.Phone.NUMBER, ContactsContract.CommonDataKinds.Phone.TYPE};
                if (android.os.Build.VERSION.SDK_INT < 11) {
                    numCursor = InviteByContactActivity.this.managedQuery(numContacts, numProjection, null, null, ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME + " COLLATE NOCASE ASC");
                } else {
                    CursorLoader cursorLoader = new CursorLoader(InviteByContactActivity.this, numContacts, numProjection, null, null, ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME + " COLLATE NOCASE ASC");
                    numCursor = cursorLoader.loadInBackground();
                }

            }

            @Override
            protected Void doInBackground(Void... params) {
                if (numCursor.moveToFirst()) {
                    try {
                        final int contactIdIndex = numCursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.CONTACT_ID);
                        final int displayNameIndex = numCursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME);
                        final int numberIndex = numCursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER);
                        final int typeIndex = numCursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.TYPE);
                        String displayName, number, type;
                        do {
                            displayName = numCursor.getString(displayNameIndex);
                            number = numCursor.getString(numberIndex);
                            type = getContactTypeString(numCursor.getString(typeIndex), true);
                            final ContactModel contact = new ContactModel(displayName, type, number);
                            phoneNumber = number.replaceAll(" ", "").replaceAll("\\(", "").replaceAll("\\)", "").replaceAll("-", "");

                            if (phoneNumber != null || displayName != null) {
                                contacts.add(phoneNumber);
                                contactsName.add(displayName);
                                contactsChecked.add(false);

                                filterdNames.add(phoneNumber);
                                filterdContactNames.add(displayName);
                                filterdCheckedNames.add(false);
                            }
                        } while (numCursor.moveToNext());
                    } finally {
                        numCursor.close();
                    }
                }


                Collections.sort(contacts, new Comparator<String>() {
                    @Override
                    public int compare(String lhs, String rhs) {
                        return lhs.compareToIgnoreCase(rhs);
                    }
                });

                InviteByContactActivity.this.runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        mContactAdapter.notifyDataSetChanged();
                    }
                });

                return null;
            }
        }

        private String getContactTypeString(String typeNum, boolean isPhone) {
            String type = PHONE_TYPES.get(typeNum);
            if (type == null)
                return "other";
            return type;
        }

        static HashMap<String, String> PHONE_TYPES = new HashMap<String, String>();

        static {
            PHONE_TYPES.put(ContactsContract.CommonDataKinds.Phone.TYPE_HOME + "", "home");
            PHONE_TYPES.put(ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE + "", "mobile");
            PHONE_TYPES.put(ContactsContract.CommonDataKinds.Phone.TYPE_WORK + "", "work");
        }
}

त्रुटि संग्रह:-

E/AndroidRuntime: FATAL EXCEPTION: main Process: com.example, PID: 6573
                                                             java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example/com.example.Activity.InviteByContactActivity}: java.lang.IllegalStateException: Only fullscreen opaque activities can request orientation
                                                              Caused by: java.lang.IllegalStateException: Only fullscreen opaque activities can request orientation

यह 27 के बाद हुआ, targetSdkVersion 26 का उपयोग करें, Google को तय करने के लिए प्रतीक्षा करें


एंड्रॉइड ओ में और बाद में यह त्रुटि तब होती है जब आप सेट करते हैं

 android:screenOrientation="portrait"

मेनिफेस्ट में

उस रेखा को हटाएं और उपयोग करें

 setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

आपकी गतिविधि में

यह आपकी समस्या को ठीक करेगा।


यदि आपने अपनी समस्या का समाधान नहीं किया है तो इस तरह मैनिफेस्ट में विज्ञापन गतिविधि पंजीकृत करें:

 <activity android:name="com.google.android.gms.ads.AdActivity" android:theme="@android:style/Theme.NoTitleBar.Fullscreen" tools:replace="android:theme" /> 

आपको एसडीके के नवीनतम संस्करण में भी अपडेट करने की आवश्यकता है।


मुझे एक ही समस्या थी, और मेरा समाधान लाइन को खत्म करना था

android:screenOrientation="portrait"

और फिर गतिविधि में इसे जोड़ें:

if (android.os.Build.VERSION.SDK_INT < Build.VERSION_CODES.O) {
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}

अगर मैं windowsIsTranslucent 'true' का उपयोग कर रहा हूं और बलपूर्वक अभिविन्यास सेट कर रहा हूं तो मुझे केवल एसडीके 26 (8.0.0) में इस समस्या का सामना करना पड़ा:

यहां समाधान है:

android:screenOrientation="unspecified"

कई लोगों ने एक फिक्स दिया है, इसलिए मैं समस्या के स्रोत के बारे में बात करूंगा।

अपवाद लॉग के अनुसार:

    //Need to pay attention mActivityInfo.isFixedOrientation() and ActivityInfo.isTranslucentOrFloating(ta)
    if (getApplicationInfo().targetSdkVersion >= O_MR1 && mActivityInfo.isFixedOrientation()) {
        final TypedArray ta = obtainStyledAttributes(com.android.internal.R.styleable.Window);
        final boolean isTranslucentOrFloating = ActivityInfo.isTranslucentOrFloating(ta);
        ta.recycle();

        //Exception occurred
        if (isTranslucentOrFloating) {
            throw new IllegalStateException(
                    "Only fullscreen opaque activities can request orientation");
        }
    }

कोड जो गतिविधि.जावा में अपवाद को ट्रिगर करता है

        /**
        * Returns true if the activity's orientation is fixed.
        * @hide
        */
        public boolean isFixedOrientation() {
            return isFixedOrientationLandscape() || isFixedOrientationPortrait()
                    || screenOrientation == SCREEN_ORIENTATION_LOCKED;
        }
        /**
        * Returns true if the activity's orientation is fixed to portrait.
        * @hide
        */
        boolean isFixedOrientationPortrait() {
            return isFixedOrientationPortrait(screenOrientation);
        }

        /**
        * Returns true if the activity's orientation is fixed to portrait.
        * @hide
        */
        public static boolean isFixedOrientationPortrait(@ScreenOrientation int orientation) {
            return orientation == SCREEN_ORIENTATION_PORTRAIT
                    || orientation == SCREEN_ORIENTATION_SENSOR_PORTRAIT
                    || orientation == SCREEN_ORIENTATION_REVERSE_PORTRAIT
                    || orientation == SCREEN_ORIENTATION_USER_PORTRAIT;
        }

        /**
        * Determines whether the {@link Activity} is considered translucent or floating.
        * @hide
        */
        public static boolean isTranslucentOrFloating(TypedArray attributes) {
            final boolean isTranslucent = attributes.getBoolean(com.android.internal.R.styleable.Window_windowIsTranslucent, false);
            final boolean isSwipeToDismiss = !attributes.hasValue(com.android.internal.R.styleable.Window_windowIsTranslucent)
                                            && attributes.getBoolean(com.android.internal.R.styleable.Window_windowSwipeToDismiss, false);
            final boolean isFloating = attributes.getBoolean(com.android.internal.R.styleable.Window_windowIsFloating, false);
            return isFloating || isTranslucent || isSwipeToDismiss;
        }

mActivityInfo.isFixedOrientation ():

<activity
        android:name=".view.FirstActiviy"
        android:screenOrientation="portrait"
        android:theme="@style/AppTheme" />

<activity
        android:name=".view.SecondActivity"
        android:parentActivityName=".view.FirstActiviy"
        android:theme="@style/AppTheme.Transparent" />

उपर्युक्त कोड विश्लेषण के अनुसार, जब TargetSdkVersion> = 27, SCREEN_ORIENTATION_LANDSCAPE, SCREEN_ORIENTATION_PORTRAIT, और अन्य संबंधित विशेषताओं का उपयोग करते समय, विंडो IsTranslucent, windowIsFloating, और windowSwipeToDismiss विषय विशेषताओं का उपयोग अपवाद को ट्रिगर करेगा।

समस्या मिलने के बाद, आप TargetSdkVersion को बदल सकते हैं या अपनी आवश्यकताओं के अनुसार विषय के संबंधित विशेषताओं को हटा सकते हैं।


यदि आप एक पूर्णस्क्रीन पारदर्शी गतिविधि का उपयोग करते हैं, तो गतिविधि पर अभिविन्यास लॉक निर्दिष्ट करने की आवश्यकता नहीं है। यह मूल गतिविधि की कॉन्फ़िगरेशन सेटिंग्स ले जाएगा। तो अगर अभिभावक गतिविधि में प्रकट होता है:

एंड्रॉयड: screenOrientation = "चित्र"

आपकी पारदर्शी गतिविधि में वही अभिविन्यास लॉक होगा: चित्र।


एंड्रॉइड ओरेओ में आप उस गतिविधि के लिए अभिविन्यास नहीं बदल सकते हैं जो शैली में रेखा से नीचे है

 <item name="android:windowIsTranslucent">true</item>

आपको सबसे पहले उस गतिविधि के लिए मैनिफेस्ट से नीचे पंक्ति को हटा देना होगा

android:screenOrientation="portrait"

दूसरा, आपको यह फ़ाइल जावा फ़ाइल में जोड़नी होगी

    //android O fix bug orientation
    if (android.os.Build.VERSION.SDK_INT < Build.VERSION_CODES.O) {
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
    }

उपयोगकर्ता AppCompatActivity बढ़ाता है और यह काम करेगा !!


मैं सबसे अधिक मूल्यांकित उत्तर से सहमत नहीं हो सकता, क्योंकि

    <activity
        android:name=".InterstitialActivity"
        ...
        android:screenOrientation="portrait"
        android:theme="@style/TranslucentTheme" />

एक त्रुटि का कारण बनता है

java.lang.IleglegalStateException: केवल पूर्णस्क्रीन अपारदर्शी गतिविधियां अभिविन्यास का अनुरोध कर सकती हैं

लेकिन यह मेरे लिए काम करता है

<item name="android:windowIsTranslucent">true</item>

और जब आप विस्तार करते हैं, तो अपनी गतिविधि के लिए इसका इस्तेमाल करें

<item name="android:windowIsTranslucent">false</item>

AndroidManifest.xml में

Caused by: java.lang.IllegalStateException: Only fullscreen opaque activities can request orientation
    at android.app.Activity.onCreate(Activity.java:1081)
    at android.support.v4.app.SupportActivity.onCreate(SupportActivity.java:66)
    at android.support.v4.app.FragmentActivity.onCreate(FragmentActivity.java:297)
    at android.support.v7.app.AppCompatActivity.onCreate(AppCompatActivity.java:84)
    at com.nut.blehunter.ui.DialogContainerActivity.onCreate(DialogContainerActivity.java:43)
    at android.app.Activity.performCreate(Activity.java:7372)
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1218)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3147)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3302) 
    at android.app.ActivityThread.-wrap12(Unknown Source:0) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1891) 
    at android.os.Handler.dispatchMessage(Handler.java:108) 
    at android.os.Looper.loop(Looper.java:166)

मैंने android:screenOrientation="behind" उपयोग किया android:screenOrientation="behind" android:screenOrientation="portrait" बजाय android:screenOrientation="behind" android:screenOrientation="portrait" । असल में, आपने एक संवाद (एक गतिविधि में) बनाया है और संवाद स्वयं अभिविन्यास का अनुरोध नहीं कर सकता है, इसे करने के लिए इसे मूल गतिविधि की आवश्यकता है (क्योंकि अभिभावक पृष्ठभूमि में दिखाई देता है और उसका लेआउट होता है)।

गतिविधि के ढेर में तुरंत नीचे की गतिविधि के समान "उन्मुख"।


मैनिफेस्ट फ़ाइल में दूसरी गतिविधि पैरेंट एक्टिविटी नाम पहली गतिविधि के रूप में सेट करें और दूसरी गतिविधि में स्क्रीनऑरिएंटेशन पैरामीटर को हटा दें। इसका मतलब है कि आपकी पहली गतिविधि माता-पिता है और आपकी दूसरी गतिविधि के अभिविन्यास का निर्णय लेती है।

<activity
android:name="com.google.android.gms.ads.AdActivity"
android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
tools:replace="android:theme"
 />

शायद आप डायलॉग (गैर-पूर्णस्क्रीन) की तरह दिखने वाली गतिविधि दिखा रहे हैं, इसलिए मैनिफेस्ट से या कोड से स्क्रीनऑरिएंटेशन हटाएं। यह इस मुद्दे को ठीक करेगा।


कुछ शोध करने के बाद, ऐसा लगता है कि यह समस्या Google बग के कारण हो सकती है। मेरे लिए, मैं अपनी गतिविधियों में इस लाइन को छोड़ने में सक्षम था क्रिएट विधि:

 setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 

और मैंने अपना लक्ष्य एसडीकेवर्सन 26 में बदल दिया। मेरे लाइन में उस लाइन को होने के कारण अभी भी एक दुर्घटना हुई, जबकि मेरा लक्ष्य एसडीकेवर्सन अभी भी 27 पर सेट हुआ था। चूंकि किसी और के समाधान ने मेरे लिए अब तक काम नहीं किया है, मैंने पाया कि यह एक अस्थायी फिक्स के रूप में काम करता है अभी व।


मुझे नहीं पता कि यह Google या एक इच्छित व्यवहार से एक बग है, लेकिन मैंने (कम से कम क्षणिक) संकलन एसडीकेवर्सन और लक्ष्य एसडीकेवर्सन को ग्रैडल में 26 तक बदलकर हल किया है ...





android-8.1-oreo