我的活动改变了屏幕锁定的方向

时间:2014-09-06 11:17:53

标签: android screen-orientation screen-lock

我已将我的活动方向设置为横向,并且除了一个案例之外它仍处于该状态。并且案例是屏幕锁定。当我的活动正在运行并且我锁定我的屏幕时,它会改变从横向到纵向的方向时间,并导致我的应用程序重新启动,我不想要。任何解决方案......?

package com.example.hello;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import android.app.Activity;
import android.app.KeyguardManager;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.SharedPreferences;
import android.media.MediaPlayer;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Environment;
import android.os.PowerManager;
import android.util.Log;
import android.view.KeyEvent;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.ArrayAdapter;
import android.widget.MediaController;
import android.widget.Spinner;
import android.widget.Toast;
import android.widget.VideoView;
public class MainActivity extends Activity{

    VideoView vv;
    public ArrayList<String> list = new ArrayList<String>();
    int n,positio = 0;
    String file = null;
    Spinner spin;
    MediaPlayer mp;
    Intent intent;
    File fl;
    boolean isPlaying = true;
     boolean screenOn = false;
     PowerManager pm;
    @Override
    public void onCreate(Bundle savedInstance){

        super.onCreate(savedInstance);
        Log.d("zaid iqbal", "in onCreate");
        requestFullScreen();
        setContentView(R.layout.activity_main);
        vv = (VideoView)findViewById(R.id.video);
        spin = (Spinner)findViewById(R.id.spinner);
        MediaController mc = new MediaController(this);
        pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
        vv.setMediaController(mc);
        setupSpin();


    }

    @Override
    protected void onPause() {
        // TODO Auto-generated method stub
            //Log.d("zaid iqbal", "in onPause");
        isPlaying = vv.isPlaying();
        screenOn = pm.isScreenOn();

        if (screenOn && isPlaying) {
            // Screen is still on, so do your thing here
            n++;
            positio = vv.getCurrentPosition();
            vv.pause();
            //Toast.makeText(this, file, Toast.LENGTH_LONG).show();
            intent = new Intent(this,playBack.class);
            intent.putExtra("file", file);
            intent.putExtra("position", positio);
            intent.putExtra("n", n);
            startService(intent);
        }

        if(!isPlaying){

            positio = vv.getCurrentPosition();

        }
    super.onPause();
}

    @Override
    protected void onResume() {
        // TODO Auto-generated method stub
        //Log.d("zaid iqbal", "in onResume");
        if(!isPlaying){

            vv.setVideoPath(file);
            vv.seekTo(positio);


        }else{

        async aa = new async();
        aa.execute();

        }
        super.onResume();
}

    @Override
    public void onBackPressed() {
        // TODO Auto-generated method stub

    }

    public void requestFullScreen(){

        requestWindowFeature(Window.FEATURE_NO_TITLE);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN
                ,WindowManager.LayoutParams.FLAG_FULLSCREEN);

    }
    public void setupSpin(){

        File root = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/Video/");
        listFiles(root);

        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item,list);
        spin.setAdapter(adapter);

        spin.setOnItemSelectedListener(new OnItemSelectedListener(){

            @Override
            public void onItemSelected(AdapterView<?> arg0, View arg1,
                    int position, long id) {
                // TODO Auto-generated method stub
                //Log.d("zaid iqbal","in onclick of spin");
                if(n == 0){
                file = Environment.getExternalStorageDirectory().getAbsolutePath() + "/Video/" + list.get(position);
                Log.d("zaid", file);
                //Toast.makeText(MainActivity.this, "original" + file, Toast.LENGTH_SHORT).show();
                vv.setVideoPath(file);
                vv.start();
                }
                //n = 0;
                /*File fl = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/Video/","settings.txt");
                try {
                    BufferedReader reader = new BufferedReader(new FileReader(fl));
                    file = reader.readLine();
                    position = Integer.parseInt(reader.readLine());
                    reader.close();

                    BufferedWriter writer = new BufferedWriter(new FileWriter(fl));
                    writer.write(file);
                    writer.write(position);
                    writer.write(n);
                    position = Integer.parseInt(reader.readLine());
                } catch (FileNotFoundException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }*/
            }

            @Override
            public void onNothingSelected(AdapterView<?> arg0) {
                // TODO Auto-generated method stub

            }

        });

    }

    public void listFiles(File f){
        try{
        File[] files = f.listFiles();
        for(File file : files){

            if(file.isFile()){

                String filenameArray[] = file.toString().split("\\.");
                String extension = filenameArray[filenameArray.length-1];
                //if(extension == "mp4" || extension == "3gp")
                list.add(file.getName());

            }

        }
        }catch(Exception e){

            e.printStackTrace();

        }

    }

    class async extends AsyncTask<String,Long,Long>{

        @Override
        protected Long doInBackground(String... params) {
            // TODO Auto-generated method stub
            if(intent != null){
                stopService(intent);
            //Reading file

            }   
            return null;
        }

        @Override
        protected void onPostExecute(Long result) {
            // TODO Auto-generated method stub
            fl = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/Video/","settings.txt");
            try {
                //Log.d("zaid iqbal", "getted file");
                BufferedReader reader = new BufferedReader(new FileReader(fl));
                file = reader.readLine();
                //Toast.makeText(MainActivity.this, "getted file" + file, Toast.LENGTH_SHORT).show();
                positio = Integer.parseInt(reader.readLine());
                n = Integer.parseInt(reader.readLine());
                reader.close();
            } catch (FileNotFoundException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            if(n != 0){

            n=0;
            try {
                BufferedWriter writer = new BufferedWriter(new FileWriter(fl));
                writer.write(file + "\n" + positio + "\n" + n);
                writer.close();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            vv.setVideoPath(file);
            vv.seekTo(positio);
            vv.start();
        }
            super.onPostExecute(result);
    }   
}

}

3 个答案:

答案 0 :(得分:0)

首先,我会阅读Android活动生命周期。我个人认为这是开始解决问题的方法 -

http://developer.android.com/training/basics/activity-lifecycle/index.html

调查的另一个选择 -

android:configChanges="orientation|keyboardHidden|screenSize"

how to stop activity recreation on screen orientation?

答案 1 :(得分:0)

Activity Manifest文件的标记中尝试此操作:

<activity android:name=".MyActivity"
          android:configChanges="orientation|keyboardHidden"
          android:label="@string/app_name">    

此处方向是指您希望自己处理的配置更改

要声明您的活动处理配置更改,请编辑清单文件中相应的<activity>元素,以包含android:configChanges属性,该属性的值代表您要处理的配置。

如果要恢复以前的活动状态,请使用onSaveInstanceState()onRestoreInstanceState()

Refer this also

答案 2 :(得分:0)

您可以尝试在您的活动中调用setRequestedOrientation(),以便强制定位。