-1

我已将活动的方向设置为横向,除了一种情况外,它保持在该状态。情况是屏幕锁定。当我的活动正在运行并且我锁定我的屏幕时,它会在一段时间内将方向从横向更改为纵向并导致我的应用程序要重新启动并且我不想要。任何解决方案......?

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

}
4

3 回答 3

0

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

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

调查的另一种选择 -

android:configChanges="orientation|keyboardHidden|screenSize"

如何在屏幕方向上停止活动娱乐?

于 2014-09-06T11:37:59.937 回答
0

Activity在你的文件标签中试试这个Manifest

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

这里的方向是指 您想要自己处理的 配置更改。

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

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

也参考这个

于 2014-09-06T11:39:02.967 回答
0

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

于 2014-09-06T11:43:44.833 回答