-1

アクティビティの向きを横向きに設定しましたが、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 に答える