onConfigration কল করা হচ্ছে না পরিবর্তিত


141

এই সকালে আমি onConfigurationChangedইভেন্টটি পরিচালনা করার চেষ্টা করে একটি সমস্যা নিয়ে এসেছি । সমস্যাটি হ'ল আমি যে পদ্ধতিটি ওভাররাইড করি, আমি ফোনের ওরিয়েন্টেশন পরিবর্তন করার সময় কল হয় না। একেবারেই ফোন করা হচ্ছে না।

android:configChanges="orientation"অ্যান্ড্রয়েড ডকুমেন্টেশনে উল্লিখিত হিসাবে আমি ম্যানিফেস্টে সংজ্ঞায়িত ক্রিয়াকলাপটি রেখেছি , তবে এটি কোনও পার্থক্য করে না।

আপনি কি এই সমস্যাটি নিয়ে এসেছেন?


1
অ্যান্ড্রয়েডের জন্য আমার একই সমস্যা হচ্ছে: কনফিগারেশন = "কীবোর্ডহিডেন" - অন-কনফিগারেশন চ্যানেলযুক্ত কলটি কল হচ্ছে না যখন নরম কীবোর্ড স্লাইড হয় বা আউট হয়।
পিটার উইটভোয়েট

কীবোর্ডহাইডারটি সফটওয়্যার কীবোর্ড দ্বারা ট্রিগার করা হয় না, শুধুমাত্র ডাইরয়েডের স্লাইডিং কীবোর্ডের মতো হার্ডওয়্যার কীবোর্ড দ্বারা।
এনএমআর

10
android:configChanges গুগল জাভাদোক এটিতে আপনার "স্ক্রিনসাইজ" যুক্ত করা উচিত : Note: If your application targets API level 13 or higher (as declared by the minSdkVersion and targetSdkVersion attributes), then you should also declare the "screenSize" configuration, because it also changes when a device switches between portrait and landscape orientations.
একাত্তস 974

@ একতোস 974 দুর্দান্ত! স্ক্রিন সাইজ যুক্ত করা কনফিগারেশনে কল হয়ে গেছে!
মানুয়েলা

হাই, আমি থিম.হোল.লাইট.নো অ্যাকশনবার থিম ব্যবহার করছি। এটির জন্য, আমার ক্রিয়াকলাপটি আবার শুরু হচ্ছে। পুনরায় চালু হওয়ার জন্য কার্যকলাপটি এড়ানোর কোনও উপায় আছে কি?
মানুকুমার

উত্তর:


250

এই একই সমস্যার জন্য আমার গ্রেমলিন ছিল:

সতর্কতা: অ্যান্ড্রয়েড ৩.২ (এপিআই লেভেল ১৩) দিয়ে শুরু করে, ডিভাইস প্রতিকৃতি এবং ল্যান্ডস্কেপ অভিমুখের মধ্যে স্যুইচ করলে "স্ক্রিনের আকার" পরিবর্তন হয়। সুতরাং, যদি আপনি API স্তরের 13 বা ততোধিক (minSdkVersion এবং টার্গেটএসডিকি ভার্সন বৈশিষ্ট্য দ্বারা ঘোষিত) বিকাশকালে ওরিয়েন্টেশন পরিবর্তনের কারণে রানটাইম পুনরায় চালু করতে বাধা দিতে চান, আপনাকে অবশ্যই "ওরিয়েন্টেশন" মানের সাথে "স্ক্রীনসাইজ" মানটি অন্তর্ভুক্ত করতে হবে। এটি হ'ল, আপনাকে অবশ্যই অ্যান্ড্রয়েড ডিক্লেয়ার করতে হবে: configChanges = "ওরিয়েন্টেশন | স্ক্রিনসাইজ"। তবে, যদি আপনার অ্যাপ্লিকেশনটি এপিআই লেভেল 12 বা তার চেয়ে কমের লক্ষ্যবস্তু করে, তবে আপনার ক্রিয়াকলাপ সর্বদা এই কনফিগারেশন পরিবর্তনটি পরিচালনা করে (কোনও অ্যান্ড্রয়েড 3.2 বা উচ্চতর ডিভাইসে চলাকালীন এই কনফিগারেশন পরিবর্তনটি আপনার ক্রিয়াকলাপটি পুনরায় আরম্ভ করে না)।

( Http://developer.android.com/guide/topics/resources/runtime-changes.html থেকে )

টিএল; ডিআর: এপিআই লেভেল 13+ টার্গেট করার সময় কনফিগারচেনজে "| স্ক্রিন সাইজ" যুক্ত করুন


9
বাহ, কেবলমাত্র একটি একক বৈশিষ্ট্য যুক্ত করতে হবে এবং সবই ধিক্কার জানাতে পারে, +1আমার দিক থেকে "screenSize"এটি।
অনুজ

@ ফিলিপস সেন্সর অর্জনের ওরিয়েন্টেশনটি কী স্থাপন করবে? কীভাবে এটি সহায়ক হবে তা নিশ্চিত নয়। যদিও সম্পাদনার জন্য ধন্যবাদ।
এনএমআর

4 বছর পরে লোকেরা এখনও এর দ্বারা কামড়ায় :)
ড্যানিয়েল উইলসন

ধন্যবাদ। দেওয়ালের বিরুদ্ধে আমার মাথাটি আঘাত করে 30 মিনিট সময় ব্যয় করলেন।
লেগোস

এটি নিখুঁত সমাধান
আনবারসু চিন্না

40

4.0 এর কিছু ডিভাইস কনফিগারেশন পরিবর্তন করে না। কেবলমাত্র শ্রোতাকে স্ক্রিন সাইজে যুক্ত করুন।

android:configChanges="orientation|screenSize"

এটি আমার সমস্যার সমাধান করেছে। ম্যানিফেস্টে ওভাররাইড করা onConfigurationChanged, এর বিরুদ্ধে পরীক্ষা করা Configuration.ORIENTATION_LANDSCAPEএবং কেবলমাত্র অন্তর্ভুক্ত করা android:configChanges="orientation"আমার নেক্সাস 7 ট্যাবলেটের পক্ষে যথেষ্ট ছিল না। ধন্যবাদ
জান্তজিলা

37

সমস্যাটি হ'ল আপনি যদি এই পদ্ধতিটি ব্যবহার করেন

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

আপনার Activityপ্রতিকৃতি মোডে জোর করতে , আপনি orientationপরিবর্তনগুলি গ্রহণের জন্য প্রার্থী নন ।

সুতরাং সমাধানটি setRequestOrientationকোনও নির্দিষ্ট মোডে না চলে। পরিবর্তে ব্যবহারSCREEN_ORIENTATION_SENSOR.


5
হ্যাঁ, এটি কাজ করে, তবে আমি কী চাই না যদি আমার অ্যাপটি ঘোরানো হয়? আমি এটি আড়াআড়ি মোডে থাকতে চান।
stoefln

আপনি নির্দিষ্ট করতে হবে <কার্যকলাপ android: নাম = "। MyActivity" Android: screenOrientation = "ভূদৃশ্য"> </ কার্যকলাপ> আপনার menifest ফাইলে
কাদির হোসেন

3
আমি উভয় কীভাবে এটি ব্যবহার করব (যখন ব্যবহারকারী কোনও ভিডিও প্লেয়ারের "পূর্ণস্ক্রিন" ক্লিক করেন) এবং onConfigChangedযখন ব্যবহারকারী তার ফোনটি ঘুরিয়ে দেয় তখন খুব বেশি গ্রহণ করা চালিয়ে যান । ইউটিউব অ্যাপের মতো একই আচরণ। এই সম্ভব?
ভোকো

29

আপনার ডিভাইসে "স্ক্রিন রোটেশন" সেটিংস চালু আছে কিনা তা পরীক্ষা করুন

"স্ক্রিন রোটেশন" সেটিংস


7
আমার এই মজার বিষয় ছিল ...: ডি
ধর্মেন্দ্র

"স্ক্রিন রোটেশন" বিকল্পটি বন্ধ থাকলেও কী কার্যকলাপটি ঘোরানো সম্ভব?? যদি হ্যাঁ, দয়া করে আমাকে কীভাবে তা বলুন ......? অনুযায়ী, আমার বোঝার ফলে এটি কাজ করবে না তবে কিছু অ্যাপ্লিকেশন কার্যকলাপটিকে আড়াআড়ি থেকে আবর্তিত করবে।
শ্রীনিবাসন

1
এস ** টন !!! আমার কোডটি কাজ করার জন্য 4-5 ঘন্টা ব্যয় করে! এটিকে ওভাররাইড করার একটি উপায় যেমন আমি অন্য একটি উত্তর থেকে শিখি তা হল <অ্যান্ড্রয়েড: ওরিয়েন্টেশন = "সেন্সর"> ম্যানিফেস্টে অন্তর্ভুক্ত করা
সুকু

19
  1. android:screenOrientationআপনি কোনও Activityবা একটি Applicationস্তরে ব্যবহার করছেন না তা পরীক্ষা করে দেখুন ।
  2. android:configChanges="orientation|keyboardHidden"পরিবর্তে ব্যবহার করার চেষ্টা করুন ।

1
আমি কীভাবে অ্যান্ড্রয়েড ব্যবহার করতে পারি: স্ক্রিন ওরিয়েন্টেশন এবং আমি কনফিগারেশন পরিবর্তন হওয়া পদ্ধতি চালাতে চাই, আমি কী করতে পারি,
THX

17

এটি কেন কাজ করে না তা জানার জন্য আমি দশ মিনিট ব্যয় করেছি। আমি যোগ করেছি screenSizeকিন্তু এটি এখনও কার্যকর হয়নি।

এটা প্রমাণিত যে আমি যোগ করেছিলেন android:configChangesকরার <application>উপাদান না <activity>উপাদান হিসেবে আমি থাকা উচিত!

ঠিক আছে, অবশ্যই এটি আমার ভুল ছিল, তবে আমরা সকলেই জানি যে আমরা সকলেই এই ধরণের মূর্খ ভুলের জন্য প্রচুর সময় ব্যয় করি। সুতরাং, আমি এই উত্তরটি যুক্ত করছি ঠিক যদি আমার মতো আরও একটি নির্বোধ প্রোগ্রামার থাকা উচিত।


আমিও একই কাজ করছি, ধন্যবাদ আপনি আমাকে বাঁচিয়েছেন
প্রনয় সরকার

হো থ্যাঙ্কস ডুড!
লরেন্ট

14

ম্যাকার্সি তার ২ য় বিকল্পের সাথে অর্থের উপরে 100%।

চেষ্টা android:configChanges="orientation|keyboardHidden|screenSize"

আমার ঠিক একই সমস্যা ছিল এবং 1.6 এমুলেটারে ঘূর্ণনের সময় ডেকে আনা keyboardHiddenকারণগুলি যুক্ত করে onConfigurationChanged। এটি সরান এবং এটি কল করা বন্ধ করে দেয়।


5

আমি একই সমস্যা ছিল না - onConfigurationChangedযখন ডিভাইসটি স্থিতিবিন্যাস পরিবর্তন নামক হয়নি সত্ত্বেও থাকার android:configChanges="orientation|keyboardHidden"ম্যানিফেস্ট ফাইল হবে। আমি Devaএখানে ভাগ করে নেওয়া স্নিপড কোড ব্যবহার করেছি

ওরিয়েন্টেশন 2.3.3 এ কাজ করছে না?

ফোন করা onConfigurationChangedহচ্ছে কিনা তা খতিয়ে দেখতে। এটা ছিল না.

কয়েক ঘন্টা পরীক্ষা-নিরীক্ষার পরে, আমি বুঝতে পারি যে ম্যানিফেস্ট ফাইলটিতে আমার নীচের লাইন রয়েছে

<uses-sdk
    android:minSdkVersion="8"
    android:targetSdkVersion="15"/>

এবং পরিবর্তন android:targetSdkVersion="15"করার জন্য android:targetSdkVersion="8", কল করা onConfigurationChangedশুরু। সুতরাং, ম্যানিফেস্টের অংশটি অবশেষে এটির মতো দেখাচ্ছে

<uses-sdk
    android:minSdkVersion="8"
    android:targetSdkVersion="8"/>

9
আপনার যে সমস্যাটি হচ্ছে তা হ'ল অ্যাট্রিবিউট: স্ক্রীনাইজ করা। আপনার উত্তর আপডেট করুন। এটি
অ্যান্ড্রয়েড

@ ব্যবহারকারী 1281750 ধন্যবাদ তবে প্রথমদিকে অ্যান্ড্রয়েড বিকাশকারী নিজেই আমি নিশ্চিত আপনি এটি কি বলছেন তা নিশ্চিত নই।
আগমনী

@ এলিয়ারার আমি মনে করি ব্যবহারকারী 1281750 বলতে কী বোঝায়: এটি আসলে কোনও ঠিক নয়! আপনার যদি একটি উচ্চতর এসডিকে সংস্করণ প্রয়োজন?
এজেন্টকনফফ

আমার জন্য যা কাজ করেছে তা আমি ভাগ করে নিয়েছি। আমি বুঝতে পারি যে এটি 'ঠিক' ফিক্স নাও হতে পারে। তবে বিকল্প কি? 'সঠিক' সমাধান কী? আর 'নিখোঁজ attribute: screensize' বলতে কী বোঝায় ? আরও বিশদ সরবরাহ করা হলে এটি সহায়ক হতে পারে।
বিজ্ঞপ্তি

ধন্যবাদ বন্ধু, এই সমাধানটি আমার বড় উত্তেজনা সমাধান করেছে ... এটি পেতে আমি এক ঘন্টা ধরে সার্ফ করছিলাম ... এটি সমস্ত আপডেট সংস্করণেও কাজ করছে
সম্পথ কুমার

3

আমি সবেমাত্র পেয়েছি যে আপনি যদি:

android:screenOrientation="landscape"

ম্যানিফেস্টে, অন কনফিগারেশনের পরিবর্তিত () খুব বেশি বলা হবে না ...

এটি এর মতো হতে পারে:

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

সেটিং ওরিয়েন্টেশন অনকফাইগ্রেশন চেঞ্জড () অবরুদ্ধ করে।


3
<uses-sdk android:minSdkVersion="8" android:maxSdkVersion="17" />

আপনাকে জটিলতা তৈরি করতে কোনও টার্গেট এসডিকে সংস্করণ ব্যবহার করবেন না। এবং সমস্ত এপিআই স্তরের জন্য এটি কনফিগারেশন পরিবর্তন শ্রোতা হিসাবে ব্যবহার করে

android:configChanges="orientation|keyboardHidden|screenLayout"

3

নিশ্চিত নয় যে এটি এটির জন্য সেরা জায়গা, তবে এই সমস্যাটির মুখোমুখি হয়ে - আমি আকর্ষণীয় কিছু পর্যবেক্ষণ করেছি।

যদি onCfigrationChanged () শ্রোতা কাজ না করে, তবে প্রতিটি সময় ওরিয়েন্টেশন পরিবর্তন করা হলে onCreate () আবার কল করা হয়।

যদি onCfigrationChanged () শ্রোতা কাজ করে থাকে, তবে ওরিয়েন্টেশন পরিবর্তনের সময় সেই পদ্ধতিটি onCreate () এর পরিবর্তে কল করা হয়।


এটি আমি যা দেখছি - তবে আমি হতে চাই না। এবং ডক্স অনুসারে এটি এমনভাবে হওয়া উচিত নয়। তাই বিভ্রান্তিকর।
স্লাইক্রেল

2

সমস্ত সমাধান ব্যবহার করে না আমি অ্যান্ড্রয়েড ম্যানিফেস্ট ফাইলটিতে আমার থিম ক্রিয়াকলাপ সরিয়ে দেওয়ার চেষ্টা করি। খুব অদ্ভুত

<activity
        android:name="MyActivity"
        android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation"
        android:theme="@style/MyTheme" --> remove this line
        />



<style name="MyTheme" parent="Theme.AppCompat.NoActionBar">
    <item name="windowNoTitle">true</item>
    <item name="android:windowIsTranslucent">true</item>
</style>

উইন্ডো নন টাইটেল না সরিয়ে পুনরায় চালু করার জন্য কার্যকলাপটি এড়ানোর কোনও উপায় কি?
মানুকুমার

2

কোনও প্রস্তাবনা আমার পক্ষে কাজ করেনি (আমি এই ইস্যুটির সাথে দেশীয় প্রকল্পের প্রতিক্রিয়া জানিয়েছিলাম), কিন্তু ডিবাগিংয়ের কয়েক ঘন্টা পরে আমি দেখতে পেলাম যে আপনার যদি স্টাইলস.এক্সএমএল এর অ্যাপপ্লেমে এই লাইনটি থাকে

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

তাহলে অ্যাপটি ঘোরবে না।


1

@ থানহ্বিনহহান ৮ আমাকে কী ধারণা দিতে পারে তা কী হতে পারে ave আমার থিমগুলি স্টাইলস.এক্সএমএল থেকে
সরানো <item name="android:windowIsTranslucent">true</item>এটি ঠিক করেছে!


0

আমার একই সমস্যা ছিল এবং আমি উভয় "অ্যান্ড্রয়েড: স্ক্রিন ওরিয়েন্টেশন" এবং "অ্যান্ড্রয়েড: কনফিগারেশন" ম্যানিফেস্টে নির্দিষ্ট করেছিলাম। আমি যখন প্রথমটি সরিয়ে ফেলি, onConfigrationChanged () ঘোরানোর জন্য কল করুন। আশ্চর্যজনক তবে এটি জাগে)


1
কিন্তু আপনি কিভাবে ঘুরবেন?
মার্ক মোলিনা

-2

আপনি কি android.content.res.Configurationআপনার আমদানির বিবৃতি পেয়েছেন ? আপনি চাপলে গ্রহটি স্বয়ংক্রিয়ভাবে আমদানি সন্নিবেশ করতে পারে Ctrl+Shift+O

যদি এটি অনুপস্থিত থাকে তবে সংকলকটি সনাক্ত করতে অক্ষম হবে যে আপনি বৈধভাবে সুপারক্লাস পদ্ধতিটি ওভাররাইড করছেন এবং তাই একটি ত্রুটি ছুঁড়ে ফেলবে।


হ্যাঁ, আমদানি ইতিমধ্যে স্থানে রয়েছে, কোনও ধারণা? কারণ আমি কোনও ত্রুটি বা কিছুই পাচ্ছি না, কেবল এটি ডাকা হচ্ছে না।
lblasa

আমি জানি না যে এটির সাথে সম্পর্কিত হতে পারে যে সমস্ত অ্যাপ্লিকেশন প্রতিকৃতি মোডে করা হচ্ছে। আমার যে ক্রিয়াকলাপে অনকফাইগ্রেশন চ্যাঞ্জড এভেন্ট পরিচালনা করতে হবে তা হ'ল একটি ট্যাবহোস্টের মধ্যে থাকা একটি ক্রিয়াকলাপ যা মোড প্রতিকৃতি। তবে যাইহোক, ইভেন্টটি ধরার জন্য সমস্যা হওয়ার কোনও মন্তব্য আমি পাইনি। আমি সত্যিই ধারণার বাইরে।
lblasa
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.