অ্যান্ড্রয়েডে স্ক্রিনের ঘূর্ণন প্রতিরোধ করুন


315

আমার আমার একটি ক্রিয়াকলাপ রয়েছে যা আমি ঘোরানো থেকে আটকাতে চাই কারণ আমি একটি অ্যাসিঙ্কটাস্ক শুরু করছি এবং স্ক্রিন রোটেশন এটিকে পুনরায় আরম্ভ করে।

এই ক্রিয়াকলাপটি বলতে কি কোনও উপায় আছে "ব্যবহারকারী তার ফোনটি পাগলের মতো কাঁপছে এমনকি স্ক্রিনটি ঘোরান না"?



11
আপনি স্ক্রিন ওরিয়েন্টেশন পরিবর্তন এবং AsyncTasks সাথে ডিল করতে পারেন । স্ক্রিন ওরিয়েন্টেশন পরিবর্তনগুলি প্রতিরোধ করা কেবলমাত্র একটি অলস কাজ। অ্যাসিঙ্কটাস্ককে ওরিয়েন্টেশন পরিবর্তনগুলি জুড়ে রাখা শক্ত নয় :)
রোমেন গাই


56
"সমাধানের উপস্থিতি রয়েছে এবং এটি শক্ত নয়" এর চেয়ে বরং সমাধান বা কিছু কোড রোমেন সরবরাহ করা অনেক বেশি সহায়ক হবে।
পিটার ভিডিএল

2
আপনি ব্যবহার করতে পারেন setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LOCKED);
mcy

উত্তর:


467

যোগ

android:screenOrientation="portrait" 

অথবা

 android:screenOrientation="landscape" 

থেকে <activity>উপাদান / ম্যানিফেস্টে s এবং আপনার কাজ সম্পন্ন হয়।


95
দয়া করে মনে রাখবেন এটি আপনার অ্যাপে কেবল একটি বাগ লুকিয়ে রেখেছে, এটি ব্যবহারকারীদের পক্ষে এটির ভ্রমণের সম্ভাবনা কম করে। কিন্তু তারা এখনও করবে। যে কোনও কনফিগারেশন পরিবর্তন আপনার ক্রিয়াকলাপটি পুনরায় আরম্ভ করতে পারে। পুনরায় চালু হওয়ার সাথে সাথে অ্যাসিঙ্ক টাস্কটি মোকাবেলা করার জন্য আপনার ক্রিয়াকলাপটি সত্যই লিখতে হবে।
হ্যাকবড

1
এটি একটি ক্ষেত্রে আমার পক্ষে কার্যকর হয়নি। অ্যাপটি খোলার আগে আমার স্ক্রিনটি ল্যান্ডস্কেপে সেট করা ছিল। আমি যখন অ্যাপ্লিকেশনটি খুললাম তখন পর্দা প্রতিকৃতিতে ঘোরানো হয়েছিল এবং অ্যাসিঙ্কটাস্কে দ্বিতীয় কল হয়েছিল।
ব্যবহারকারী522559

2
আপনাকে "প্রতিকৃতি মোডে খুলতে" এবং "সর্বদা প্রতিকৃতি মোডে থাকতে" জিনিস সেট করতে হবে । কেবল 1 করা অর্থহীন।
ক্যারল

1
@ হ্যাকবড নির্বিশেষে, "অ্যান্ড্রয়েড অ্যাপ্লিকেশনটির স্ক্রিন রোটেশন রোধ করতে এই # 1 গুগল হিট,"
অ্যাসিঙ্কের

7
@ হ্যাকবড এই সমস্যাটি মোকাবেলা করার জন্য আমরা কীভাবে আমাদের ক্রিয়াকলাপটি সঠিকভাবে লিখব?
ব্যবহারকারী 41805

127

আপনার চলমান অবস্থায় স্বয়ংক্রিয় ঘোরানো স্ক্রিনটি রোধ করতে আপনি নীচের যুক্তিটি অনুসরণ করতে পারেন AsyncTask:

  1. ব্যবহার করে আপনার ক্রিয়াকলাপের ভিতরে আপনার বর্তমান স্ক্রিন ওরিয়েন্টেশন সংরক্ষণ করুন getRequestedOrientation()
  2. ব্যবহার করে অটো স্ক্রিন ওরিয়েন্টেশন অক্ষম করুন setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_NOSENSOR)
  3. চালানো / চালানো আপনার AsyncTask
  4. আপনার শেষে AsyncTaskআপনার পূর্বের অবস্থান স্থিতি ব্যবহার করে পুনরুদ্ধার করুন setRequestedOrientation(oldOrientation)

দয়া করে মনে রাখবেন Activityএকটি এর অভ্যন্তরে বৈশিষ্ট্য অ্যাক্সেস করার বিভিন্ন উপায় রয়েছে (যা ইউআই থ্রেডে চলে) AsyncTask। আপনি আপনার AsyncTaskএকটি অভ্যন্তরীণ শ্রেণি হিসাবে বাস্তবায়ন করতে পারেন বা আপনি Handlerএমন বার্তা ব্যবহার করতে পারেন যা আপনার Activiyক্লাসকে পোকে ।


9
নির্বাচিত উত্তরের চেয়ে অনেক ভাল।
মতেজ

3
মহান ধারণা :) আপনি ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED ব্যবহার করতে পারেন আপনার বর্তমান পর্দা স্থিতিবিন্যাস সংরক্ষণ হবে না
fligant

এটি অবিশ্বাস্য মনে হয়, @ ইমি, ধন্যবাদ! দেখে মনে হচ্ছে "সত্য হতে পারে খুব ভাল!" সমস্যাটি নিয়ে প্রচুর পরিমাণে আলোচনার বিষয়টি লক্ষ্য করুন: স্ট্যাকওভারফ্লো . com / q / 3821423 / 294884 ... অ্যান্ড্রয়েড বিশেষজ্ঞরা, এখানে কোনও খারাপ দিক নেই ?! আবার ধন্যবাদ .. অনেক অনেক।
ফ্যাটি

3
বিষ্ঠা !! এই না কাজ যন্ত্রে আড়াআড়ি মোডে আরম্ভ করার জন্য কিছু ঘটে তাহলে। কি খারাপ অবস্থা! Sux হে
Fattie

@ এমরে, এই কোডটি কিছু ক্ষেত্রে কার্যকর হয় না। উদাহরণস্বরূপ, যদি ব্যবহারকারী আপনার অ্যাসিঙ্কটাস্কের শুরু এবং এটির শেষের মধ্যে তার অবস্থান পরিবর্তন করে। আপনি তখন ভুল দিকটি সংরক্ষণ এবং পুনরুদ্ধার করতে পারতেন।
পেসারিয়ার

27

আপনার ম্যানিফেস্ট ফাইলে, প্রতিটি ক্রিয়াকলাপের জন্য যা আপনি স্ক্রিনের ঘূর্ণনটি লক করতে চান তা যুক্ত করুন: আপনি যদি এটি আনুভূমিক মোডে লক করতে চান:

<activity
        ...
        ...
        android:screenOrientation="landscape">

অথবা আপনি যদি এটি উল্লম্ব মোডে লক করতে চান:

<activity
            ...
            ...
            android:screenOrientation="portrait">

24

আমি এটি করার সবচেয়ে সহজ উপায়টি হ'ল

this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

onCreate মধ্যে, ঠিক পরে

setContentView(R.layout.activity_main);

তাই ...

@Override
protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
  this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}

7

অ্যান্ড্রয়েড ম্যানিফেস্টে যাওয়ার পরিবর্তে আপনি কেবল এটি করতে পারেন:

screenOrientation = getResources().getConfiguration().orientation;
getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LOCKED);
... AsyncTask

screenOrientation = getResources().getConfiguration().orientation;


@Override
protected void onPostExecute(String things) {
    context.setRequestedOrientation(PlayListFragment.screenOrientation);
    or 
    context.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_FULL_SENSOR);
}

এখানে কেবলমাত্র ত্রুটি এটির জন্য এটি API এর স্তরের 18 বা তারও বেশি প্রয়োজন। সুতরাং মূলত এটি বর্শার ডগা।


এই অংশটি হোম এবং সাম্প্রতিক অ্যাপ্লিকেশন বোতামটি অক্ষম করছে এবং এমনকি এটি SCREEN_ORIENTATION_FULL_SENSOR এর সাথে লক প্রকাশের পরেও এটি অক্ষম অবস্থায় রয়েছে। অ্যান্ড্রয়েড এন।
কেআমল

6

Activity.java

@Override     
 public void onConfigurationChanged(Configuration newConfig) {       
        try {     
            super.onConfigurationChanged(newConfig);      
            if (this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {      
                // land      
            } else if (this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) {      
               // port       
            }    
        } catch (Exception ex) {       
     }   

Andro আইডি

 <application android:icon="@drawable/icon" android:label="@string/app_name">
  <activity android:name="QRCodeActivity" android:label="@string/app_name"
  android:screenOrientation="landscape" >
   <intent-filter>
    <action android:name="android.intent.action.MAIN" />
    <category android:name="android.intent.category.LAUNCHER" />
   </intent-filter>
  </activity>

 </application>

2

অ্যান্ড্রয়েড ম্যানিফেস্ট.এক্সএমএল এর ACTIVITY এ নিম্নলিখিত বৈশিষ্ট্যগুলি আপনার যা দরকার তা হল:

android:configChanges="orientation"

সুতরাং, সম্পূর্ণ ক্রিয়াকলাপ নোডটি হ'ল:

<activity android:name="Activity1"
          android:icon="@drawable/icon"
          android:label="App Name"
          android:excludeFromRecents="true"
          android:configChanges="orientation">
    <intent-filter>
        <action android:name="android.intent.action.MAIN"/>
        <category android:name="android.intent.category.LAUNCHER"/>
    </intent-filter>
</activity>

1

যোগ করুন

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_NOSENSOR);
        ...
        ...
        ...
}

1

আপনার অ্যান্ড্রয়েড ম্যানিফেস্ট.এক্সএমএলে নিম্নলিখিতগুলি যুক্ত করুন

[অ্যাপ্লিকেশন> সিআরসি> প্রধান> অ্যান্ড্রয়েড ম্যানিফেস্ট। xML]

<activity android:name=".MainActivity"
          android:configChanges="orientation"
          android:screenOrientation="portrait"/>

উদাহরণ:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="xxx.zzzzzz.yyyyy">

   <uses-permission android:name="A-PERMISSION" />

   <application>
      <activity android:name=".MainActivity"
                android:screenOrientation="portrait"
                android:configChanges="orientation">
      </activity>
   </application>

</manifest>

0

আপনি ব্যবহার করে থাকেন অ্যান্ড্রয়েড বিকাশকারী সরঞ্জামসমূহ (এডিটি) এবং অন্ধকার আপনি আপনার AndroidManifest.xml ফিরে যেতে পারেন -> অ্যাপ্লিকেশন ট্যাবে -> নেমে গিয়ে আপনার কার্যকলাপের নির্বাচন করুন। শেষ পর্যন্ত, আপনার পছন্দসই ওরিয়েন্টেশন নির্বাচন করুন। আপনি অনেকগুলি বিকল্পের মধ্যে একটি নির্বাচন করতে পারেন।


0

আপনাকে ম্যানিফেস্ট.এক্সএমএল ফাইলটিতে নিম্নলিখিত কোড যুক্ত করতে হবে। যে ক্রিয়াকলাপের জন্য এটি ঘোরানো উচিত নয়, সেই ক্রিয়াকলাপে এই উপাদানটি যুক্ত করুন

android:screenOrientation="portrait"

তাহলে ঘোরবে না।


0

আপনি এইভাবে চেষ্টা করতে পারেন

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.itclanbd.spaceusers">

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:roundIcon="@mipmap/ic_launcher_round"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">
    <activity android:name=".Login_Activity"
        android:screenOrientation="portrait">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>


0

অ্যাসিঙ্কটাস্ক ব্যবহারের পরিবর্তে স্ক্রিনের আবর্তন প্রতিরোধের চেয়ে অ্যাপ্লিকেশন তৈরি করার একটি উত্তম উপায় হ'ল অ্যাসিঙ্কটাস্ক ব্যবহারের পরিবর্তে ক্রিয়াকলাপ পরিবর্তিত হয়েও আপনার ডেটা সুরক্ষিত রাখতে অ্যাসিঙ্কটাস্কলডার ব্যবহার করুন ।


0

স্ক্রিনের আবর্তন প্রতিরোধ করুন কেবলমাত্র আপনার ম্যানিফেস্টে এই নিম্নলিখিত লাইনটি যুক্ত করুন।

<activity
        android:name=".YourActivity"
        android:screenOrientation="portrait" />

এটি আমার পক্ষে কাজ করে।


0

"portrait"আপনার অ্যান্ড্রয়েডম্যানিয়েস্ট.এক্সএমএল ফাইলে থাকা ব্যবহারকারীদের ভাল সমাধানের মতো মনে হতে পারে। তবে এটি নির্দিষ্ট দিকনির্দেশনা না পেয়ে নির্দিষ্ট ডিভাইসগুলিকে (যে আড়াআড়ি ক্ষেত্রে সবচেয়ে ভাল কাজ করে) প্রতিকৃতিতে যেতে বাধ্য করে। সর্বশেষতম অ্যান্ড্রয়েড সংস্করণে, আপনি একটি ত্রুটি পরা পাবেন। সুতরাং আমার পরামর্শ এটি ব্যবহার করা ভাল "nosensor"

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