2014-09-06 78 views
-1

我已經設置了我的活動方向爲風景,並且它保持在該狀態,除了一個case.and案件是屏幕鎖定。當我的活動正在運行時,我鎖定了我的屏幕,它將方向從景觀肖像一點點的時間,並導致我的應用程序重新啓動,而我不想。任何解決方案...?我的活動改變了屏幕鎖定方向

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

} 
+0

發佈您的代碼, – Ameer 2014-09-06 11:23:43

+0

Editted我的帖子。取一看 – 2014-09-06 11:33:12

+0

的Android活動的生命週期 - http://developer.android.com/training/basics/activity-lifecycle/index.html – 2014-09-06 11:34:59

回答

0

Activity標籤Manifest文件試試這個:

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

這裏定位是指配置更改你想要自己處理。

要聲明您的活動處理配置更改,請在清單文件中編輯相應的<activity>元素,以包含android:configChanges屬性的值,該值表示您要處理的配置。

如果您想要恢復之前的活動狀態,請使用onSaveInstanceState()onRestoreInstanceState()

Refer this also

+0

什麼都沒有發生 – 2014-09-06 11:48:09

0

您可以嘗試致電setRequestedOrientation()在你的活動,因此取向被迫。

+0

例子嗎? – 2014-09-06 11:58:12

+0

http://developer.android.com/reference/android/app/Activity.html#setRequestedOrientation%28int%29但請注意,即使這樣可以避免從風景變爲肖像,應用程序生命週期管理也需要你恢復了狀態 – 2014-09-06 12:28:56