클래스간 변수 공유 - 전역변수 (global variable) 사용하기

프로그래밍/Android (Java)|2016. 12. 12. 08:44
반응형

별도의 파일 생성


Global_Variable.java


package com.tistory.sysdocu;


import android.app.Application;


public class Global_Variable extends Application {


    private String GlobalString;


    public String getState(){

        return GlobalString;

    }


    public void setState(String GS){

        GlobalString = GS;

    }


}




AndroidManifest.xml 내용 추가


(생략)


    <application

        android:name=".Global_Variable"

        android:icon="@drawable/ic_launcher"

        android:label="@string/app_name"

        android:theme="@style/AppTheme">


(생략)




본문 파일에서 사용하기


(생략)


   @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);


        Global_Variable GV = ((Global_Variable)getApplicationContext());

        GV.setState("Hello world");        // 저장

        String Global = GV.getState();    // 불러오기


(생략)



반응형

댓글()

지연 실행 (delay)

프로그래밍/Android (Java)|2016. 11. 14. 08:08
반응형

import android.os.Handler;



                        new Handler().postDelayed(new Runnable() {

                            @Override

                            public void run() {

                                // 이곳에 실행코드 입력

                            }

                        }, 3000);  // 3초 지연후 실행코드 실행



반응형

댓글()

문자열 자르기

프로그래밍/Android (Java)|2015. 12. 14. 08:21
반응형

String url = "http://sysdocu.tistory.com/name.txt";

 

String newurl = url.substring(6);    // http:// 부분 제외하고 newurl 에 다시 입력

 

String protocol = url.substring(0,4);    // 프로토콜만 protocol 에 입력
 

String[] split = newurl.split("/");   // / 를 기준으로 자르기. split[0] : sysdocu.com, split[1] : name.txt

 

String type = split[1].substring(split[1].length() - 3);    // 확장자(.txt)만 type 에 입력

반응형

댓글()

MX플레이어를 띄워 URL 동영상 재생하기 (외부앱 구동)

프로그래밍/Android (Java)|2015. 12. 4. 13:44
반응형

Intent i = new Intent(Intent.ACTION_VIEW);
Uri videoUri = Uri.parse("http://sysdocu.com/movie.mp4");

i.setPackage("com.mxtech.videoplayer.ad");    <- 패키지명으로 외부앱 구동

i.setDataAndType(videoUri, "video/*");
startActivity(i);
 

참고 문서 : https://sites.google.com/site/mxvpen/api

 

=======================================================

 

연속 재생을 갯수에 맞게 하기

 

Parcelable[]uris = new Parcelable[3];    <- 여기 '3' 이 총 길이인데.. 자동으로 하려고 split.length 등과 같이 변수로 넣으려니까 잘 안됌. 나머지는 OK.
for (int j=1; j<split.length; j++) {
uris[j-1] = Uri.parse(split[j] + "");
}

=======================================================

 

연속 재생 (참고용)

import android.os.Parcelable;

 

Intent intent = new Intent(Intent.ACTION_VIEW);
Parcelable[]uris = new Parcelable[]{Uri.parse("http://.../channel0/stream.m3u8"),
Uri.parse( "http://.../channel1/stream.m3u8"),
Uri.parse("http://.../channel2/stream.m3u8"),
Uri.parse("http://.../channel3/stream.m3u8")};

Uri videoUri = Uri.parse("http://.../channel0/stream.m3u8");
intent.setDataAndType( videoUri, "application/x-mpegURL" );
intent.setPackage( "com.mxtech.videoplayer.pro" );
intent.putExtra("video_list", uris);
startActivity( intent );

 

 

위 예제와 같이 처음 URL 이 리스트에 반드시 포함되어 있어야, 순차적으로 재생이 됩니다.

 

[출처] https://groups.google.com/forum/#!topic/mx-videoplayer/FXo3qm-u6zw

 

 

 

 

 

 


반응형

'프로그래밍 > Android (Java)' 카테고리의 다른 글

지연 실행 (delay)  (0) 2016.11.14
문자열 자르기  (0) 2015.12.14
Dialog의 각종 속성들 정리  (0) 2015.12.01
Fragment에서 화면 회전시 강제종료 해결  (0) 2015.11.30
안드로이드 for 문  (0) 2015.11.27

댓글()

Dialog의 각종 속성들 정리

프로그래밍/Android (Java)|2015. 12. 1. 11:38
반응형

Dialog의 각종 속성들 정리 입니다.


1) Back키 눌렀을 경우 Dialog Cancle 여부 설정

 
  mDialog.setCancelable(false); // true : cancle , false : no cancle


2) Dialog 호출시 배경화면이 검정색으로 바뀌는 것 막기 !

 
  mDialog.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);


3) Dialog 밖을 터치 했을 경우 Dialog 사라지게 하기

 
  mDialog.setCanceledOnTouchOutside(true);


4) Dialog 밖의 View를 터치할 수 있게 하기 (다른 View를 터치시 Dialog Dismiss)

 
  mDialog.getWindow().setFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL,

             WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL);
 


5) Dialog 자체 배경을 투명하게 하기

 
  mDialog.getWindow().setBackgroundDrawable

             (new ColorDrawable(android.graphics.Color.TRANSPARENT));
 



6) Dialog Cancle시 Event 받기 

 
  mDialog.setOnCancelListener(OnCancelListener listener) 




7) Dialog Show시 Event 받기 

 
  mDialog.setOnShowListener(OnShowListener listener) 




8) Dialog Dismiss시 Event 받기 

 
  mDialog.setOnDismissListener(OnDismissListener listener) 







예제코드 :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
package arabiannight.tistory.com.dialogattribute;
 
import android.app.Activity;
import android.app.Dialog;
import android.content.DialogInterface;
import android.content.DialogInterface.OnCancelListener;
import android.content.DialogInterface.OnDismissListener;
import android.content.DialogInterface.OnShowListener;
import android.graphics.drawable.ColorDrawable;
import android.os.Bundle;
import android.view.View;
import android.view.WindowManager;
import android.widget.Toast;
 
public class MainActivity extends Activity {
 
    private Dialog mDialog = null;
     
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
         
        createDialog();
         
    }
     
    public void onClick(View v) {
        switch (v.getId()) {
         
        case R.id.btn_click:
             
            Toast.makeText(MainActivity.this, "Activity Button 입니다.",
                    Toast.LENGTH_SHORT).show();
         
        case R.id.btn_ok:
             
            dismissDialog();
             
            break;
             
        case R.id.btn_cancle:
             
            dismissDialog();
             
            break;
 
        default:
            break;
        }
    }
     
    private void createDialog() {
        final View innerView = getLayoutInflater().inflate(R.layout.dialog, null);
         
        mDialog = new Dialog(this);
        mDialog.setTitle("Title");
        mDialog.setContentView(innerView);
         
        // Back키 눌렀을 경우 Dialog Cancle 여부 설정
        mDialog.setCancelable(true);
         
        // Dialog 생성시 배경화면 어둡게 하지 않기
        mDialog.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);
         
        // Dialog 밖을 터치 했을 경우 Dialog 사라지게 하기
//      mDialog.setCanceledOnTouchOutside(true);
         
        // Dialog 밖의 View를 터치할 수 있게 하기 (다른 View를 터치시 Dialog Dismiss)
        mDialog.getWindow().setFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL,
                WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL);
         
        // Dialog 자체 배경을 투명하게 하기
//      mDialog.getWindow().setBackgroundDrawable
//              (new ColorDrawable(android.graphics.Color.TRANSPARENT));
         
        // Dialog Cancle시 Event 받기
        mDialog.setOnCancelListener(new OnCancelListener() {
             
            @Override
            public void onCancel(DialogInterface dialog) {
                Toast.makeText(MainActivity.this, "cancle listener",
                        Toast.LENGTH_SHORT).show();
            }
        });
         
        // Dialog Show시 Event 받기
        mDialog.setOnShowListener(new OnShowListener() {
             
            @Override
            public void onShow(DialogInterface dialog) {
                Toast.makeText(MainActivity.this, "show listener",
                        Toast.LENGTH_SHORT).show();
            }
        });
         
        // Dialog Dismiss시 Event 받기
        mDialog.setOnDismissListener(new OnDismissListener() {
             
            @Override
            public void onDismiss(DialogInterface dialog) {
                Toast.makeText(MainActivity.this, "dismiss listener",
                        Toast.LENGTH_SHORT).show();
            }
        });
         
        mDialog.show();
         
    }
     
    private void dismissDialog() {
        if(mDialog != null && mDialog.isShowing()) {
            mDialog.dismiss();
        }
    }
 
}





파일첨부 : 

 TestDialogAttribute.zip



스크린샷 : 




감사합니다.


[출처] http://arabiannight.tistory.com/360


TestDialogAttribute.zip





반응형

댓글()

Fragment에서 화면 회전시 강제종료 해결

프로그래밍/Android (Java)|2015. 11. 30. 13:08
반응형

이 글을 작성하기에 큰 도움을 주신 네타냥(liar1938)님께 감사드립니다!

저번 강좌 

2013/07/29 - [미르의 개발 이야기/어플 개발 강좌] - 안드로이드 탭을 구현해 보자, Fragment

의 문제점을 보면 화면을 회전할경우 어플리케이션이 강제종료된다는 점이었습니다


이번에 네타냥님의 도움으로 이 문제를 해결하게 되어 한번 글을 올려볼까 하는대요 ㅎ

제 글실력이 부족하여 못알아 들으신경우 http://blog.naver.com/liar1938/30173022348으로 가시면 더욱 자세하게 아실수 있으실겁니다 ㅎㅎ


으아아아아아 컴이 렉걸렸어요 ;;


왜 문제가 발생하느냐...

기기의 화면을 전환할때는 onDestroy()와 onCreate()가 호출되면서 바뀐 화면이 화면에 나타납니다

그런대 이때 모든 Activity의 필드, 변수가 초기화 되는대요

화면이 다시 만들어 지면서 강제종료가 발생하는 겁니다


그럼 해결해 봅시다

AndroidManifest.xml에서 모든 Activity부분에

android:configChanges="keyboardHidden|orientation|"

또는

android:configChanges="keyboardHidden|orientation|screenSize"

을 추가해 주세요


만약 안드로이드 3.2 허니콤(APU 13)이상이라면

android:configChanges="keyboardHidden|orientation|screenSize"

을 추가해 주셔야만 합니다


관련 API입니다 (출처: http://developer.android.com/guide/topics/manifest/activity-element.html, http://blog.naver.com/liar1938/30173022348)

직역하자면 target API 버전이 13이상이라면 android:configChanges에 screenSize도 추가해 주라네요..


아오... 제 머리가 안돌아가서 글 인용하겠습니다...


 'android:configChanges' 속성은 화면전환시 자동으로 onDstroy()와 onCreate()를 호출하지 않고 onConfigurationChanged()  메소드 호출하여 내가 원하는 내용으로 환경 설정을 하겠다고 안드로이드에게 알려줍니다. 네, 이렇게되면 Activity를 재생성하지 않아도 되는거죠. ^^ 화면회전이 생길 때, 안드로이드 시스템이 아니라 액티비티 내부에서 직접 이벤트를 관리하게 됩니다. 

 

그런데 orientation 환경 변화는 이해가 가는데 keyboardHidden 값은 왜 주는 걸까요? 

keyboardHidden이란 키보드가 보여지거나 숨겨지는 변경사항인데, 키보드 히든 구성을  

주는 것은 기존에 물리적 키보드가 장착되어 있는 모바일 기기와의 호환성 때문 

입니다. 특정 기기의 경우 키보드를 열면 자동으로 화면이 회전된다고 하더라구요ㅎ 

 

한가지 주의해야 할 것은 android:configChanges 속성이 각 액티비티 마다

하나씩 들어가야 한다는 것입니다. 물런 액티비티가 하나라면 한번만 사용해도 됩니다.
 

매니페스트 파일에 속성을 추가했다면 이제 자바 코드내에서 onConfigurationChanged()

메소드를 작성해야합니다. 이 메소드가 화면 회전시 onCreate() 메소드 대신 호출되게 되는거죠.

 


http://blog.naver.com/liar1938/30173022348


그럼 이제 MainActivity에 아래 메소드를 추가해 줍시다


public void onConfigurationChanged(Configuration newConfig) {

            

        super.onConfigurationChanged(newConfig);


        (이곳에 작업 내용을 적습니다, 생략 가능)

}


만약 화면 전환시 알림을 뜨게 하고 싶다면


if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE)

{

// 기기가 가로로 회전할때 할 작업

} else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT)

{

// 기기가 세로로 회전할때 할 작업

}


이런식으로 작성해 주시면 됩니다



확인결과 잘 작동하는군요 ㅎㅎ

 

[출처] 미르의 IT 정복기 (http://itmir.tistory.com/288)

반응형

댓글()

안드로이드 for 문

프로그래밍/Android (Java)|2015. 11. 27. 17:04
반응형

자바 반복문(Java repetitive statement) 예제

for문은 반복된 명령을 수행할 때 사용됩니다.

 

예제소스

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class h5bak_for {
    public static void main(String[] args) {
        int arrNum[] = { 11, 22, 33, 44, 55, 66 };
        for (int i = 0; i <= 10; i++) {
            System.out.println("출력 : " + i);
        }
        System.out.println("출력 끝");
        System.out.println("============================");
  
        for (int num : arrNum) { // 배열의 내용을 출력할 때 향상된 for문으로 간단하게 출력
            System.out.println("향상된 for : " + num);
        }
    }
}


실행결과


[출처] http://h5bak.tistory.com/179


반응형

댓글()

배열 부분 복사

프로그래밍/Android (Java)|2015. 11. 27. 16:37
반응형

import java.util.Arrays;

import java.util.ArrayList;



Use copyOfRange method from java.util.Arrays class:

int[] newArray = Arrays.copyOfRange(oldArray, startIndex, endIndex);

startIndex is the initial index of the range to be copied, inclusive.
endIndex is the final index of the range to be copied, exclusive. (This index may lie outside the array)

E.g.:

   //index   0   1   2   3   4
int[] arr = {10, 20, 30, 40, 50};
Arrays.copyOfRange(arr, 0, 2);          // returns {10, 20}
Arrays.copyOfRange(arr, 1, 4);          // returns {20, 30, 40}
Arrays.copyOfRange(arr, 2, arr.length); // returns {30, 40, 50} (length = 5)



[출처] http://stackoverflow.com/questions/11001720/get-only-part-of-an-array-in-java

반응형

댓글()

기본 플레이어로 연속 재생기능 만들기

프로그래밍/Android (Java)|2015. 11. 27. 08:35
반응형

이번 프로젝트에서 사용한 연속플레이어 입니다.

플레이어에 종료 리스너를 등록하여 종료 직전에 남아있는 동영상을 체크하고 있으면 다음동영상을 재생하는 간단한 코드입니다.

해당 테스트코드를 가지고 기능을 좀더 추가하고 예외처리를 했는데요. 아래에 있는 코드만으로도 실행은 가능합니다.

import java.util.ArrayList;

import android.app.Activity;

import android.media.MediaPlayer;

import android.net.Uri;

import android.os.Bundle;

import android.widget.MediaController;

import android.widget.VideoView;


public class TestPlayerActivity extends Activity {

private static final String MOVIE_URL ="http://www.archive.org/download/Unexpect2001/Unexpect2001_512kb.mp4";

private ArrayList<String> array = new ArrayList<String>();

private int count;


@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

//주소를 어레이에 추가합니다.

            array.add("http://www.archive.org/download/Unexpect2001/Unexpect2001_512kb.mp4");

            array.add("http://www.archive.org/download/Unexpect2001/Unexpect2001_512kb.mp4");

            array.add("http://www.archive.org/download/Unexpect2001/Unexpect2001_512kb.mp4");

            count = 0;

            setContentView(R.layout.main);

            final VideoView videoView = (VideoView) findViewById(R.id.VideoView);

            MediaController mediaController = new MediaController(this);

            mediaController.setAnchorView(videoView);

            //비디오 uri등록 

            Uri video = Uri.parse(MOVIE_URL);

            videoView.setMediaController(mediaController);

            videoView.setVideoURI(video);

            videoView.requestFocus();

            //비디오 종료시 실행되는 리스너

           MediaPlayer.OnCompletionListener mComplete = newMediaPlayer.OnCompletionListener() {

                          @Override

                           public void onCompletion(MediaPlayer mp) {

                                       //재생할 비디오가 남아있을 경우
                                        if
 (array.size() > count) {

                                            Uri video1 = Uri.parse(array.get(count).toString());

                                            count++;

                                            videoView.setVideoURI(video1);

                                            videoView.start();

                                            }

                                       // TODO Auto-generated method stub

                                   }

                         };

                    //리스너 등록 
                    videoView.setOnCompletionListener(mComplete);

                    //비디오 시작 
                    videoView.start();

             }

}

 
xml

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout android:id="@+id/LinearLayout01"

 android:layout_height="fill_parent"xmlns:android="http://schemas.android.com/apk/res/android"

 android:layout_width="fill_parent" android:orientation="vertical">


 <VideoView android:layout_height="fill_parent"

  android:layout_width="fill_parent" android:id="@+id/VideoView"></VideoView>

</LinearLayout>


[출처] http://whitegom.tistory.com/24



반응형

'프로그래밍 > Android (Java)' 카테고리의 다른 글

안드로이드 for 문  (0) 2015.11.27
배열 부분 복사  (0) 2015.11.27
캐쉬, 쿠키 지우고 종료  (0) 2015.11.25
레이아웃 요소 숨기기  (0) 2015.11.20
webview 뒤로가기 설정  (0) 2015.11.20

댓글()

캐쉬, 쿠키 지우고 종료

프로그래밍/Android (Java)|2015. 11. 25. 17:10
반응형

1. 떠도는 캐시 삭제 하는 소스에 쿠키 삭제 하는 부분을 추가 하였다. 


import android.webkit.CookieManager;

import android.webkit.CookieSyncManager;


    @Override 
    public void onDestroy() { 
        super.onDestroy(); 
        clearApplicationCache(null); 
        android.os.Process.killProcess(android.os.Process.myPid() ); 
    } 
    
    public void clearApplicationCache(java.io.File dir){ 
        if(dir==null) dir = getCacheDir(); 
        if(dir==null) return; 
        java.io.File[] children = dir.listFiles(); 
        try{ 
            // 쿠키 삭제 
            CookieManager cookieManager = CookieManager.getInstance(); 
            cookieManager.removeSessionCookie(); 
            
            for(int i=0;i<children.length;i++) 
                if(children[i].isDirectory()) 
                    clearApplicationCache(children[i]); 
                else children[i].delete(); 
        } 
        catch(Exception e){} 
    }

 

2. 핸드폰에서 캐시는 0byte로 깨끗해 지는데 데이터에 찔끔 남는 데이터는 뭔고 ….

 

[출처] http://xyunsikx.tistory.com/23

반응형

댓글()

레이아웃 요소 숨기기

프로그래밍/Android (Java)|2015. 11. 20. 17:57
반응형

android:visibility="gone"


위 옵션을 주면 동작은 하지만 화면에만 나타나지 않습니다.


반응형

댓글()