지식메모




이건 또 뭔 말인지..


단지 그냥 버튼 누르면 액티비티 시작하게 하려고 했는데


이 동작과 관련된 모든 앱이 해제 또는 차단되었거나 설치되지 않았습니다


이게 토스트메시지로 뜨면서 되질 않는다.


구글 찾아봐도 다 토렌트 얘기하고 그러는데 영문 메시지로 검색해도 뭐가 뭔지 영..


그러다 네이버로 검색해보았떠니


http://blog.naver.com/mdroid_16/220903491982


이런 해결책이 있다고 한다 . 쓰일 함수 안에 intent를 넣어주었더니 해결되었다라..


그래서 시도해보았다.

처음 코드 상태가

이런 식으로 되어있어서 저 Intent it 코드를 OnTouchListener 안에 넣어보았다.


그랬더니 이런 에러가 뜬다.



에러메시지 검색해서 찾아보니

https://stackoverflow.com/questions/20241857/android-intent-cannot-resolve-constructor

여기서 해보라는데로 해보았다.



Intent it = new Intent(this, DBActivity.class); > Intent it = new Intent(v.getContext(), DBActivity.class); 로 수정

this > v.getContext()

이렇게 바꿔주었다.


그랬더니 된다.

다행이다.









인텐트로 다른 액티비티를 시작하고자 했는데 에러가 발생

startActivity(it); //에러 발생


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
// input your code herepublic class AlwaysTopServiceTouch extends Service {
    private View mView;
    private WindowManager mManager;
    private WindowManager.LayoutParams mParams;
 
    private float mTouchX, mTouchY;
    private int mViewX, mViewY;
 
    private boolean isMove = false;
    Intent it = new Intent(this, DBActivity.class);
 
 
 
    private OnTouchListener mViewTouchListener = new OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
 
            switch (event.getAction()) {
                case MotionEvent.ACTION_DOWN:
                    isMove = false;
 
                    mTouchX = event.getRawX();
                    mTouchY = event.getRawY();
                    mViewX = mParams.x;
                    mViewY = mParams.y;
 
                    break;
 
                case MotionEvent.ACTION_UP:
                    if (!isMove) {
//                        Toast.makeText(getApplicationContext(), "???",
//                                Toast.LENGTH_SHORT).show();
                        startActivity(it); //에러 발생
                    }
 
cs

에러 코드는

android.util.AndroidRuntimeException: Calling startActivity() from outside of an Activity  context requires the FLAG_ACTIVITY_NEW_TASK flag. Is this really what you want?


플래그 어쩌구 저쩌구 FLAG_ACTIVITY_NEW_TASK  이게 요구된다는데

확인결과

서비스는 태스크가 없기 때문에 액티비티를 시작하려면 new task 플래그를 줘야 한다고 한다.


그래서 코드수정

startActivity(it) 를

startActivity(it.addFlags(FLAG_ACTIVITY_NEW_TASK));

위와 같이 수정하니 에러가 발생하지 않았다.




개발자분 블로그 글 참고

http://gun0912.tistory.com/61

깃허브 주소

https://github.com/ParkSangGwon/TedPermission


오버레이 권한 얻기위해서 검색해보다가 TedPermission 이라는 라이브러리를 알게되었다.

한국개발자분이신거 같은데 정말 편하게 만들어 놓으신듯 하다.


블로그 설명에 보면 그래들에 한줄 추가하고

OnCreate에 PermissionListener 코드 추가하고

권한체크 시작 코드 넣으니까 끝났다.


엄청 간편했다.

권한은 권한체크 코드에서

.setPermissions(Manifest.permission.READ_CONTACTS)

요 부분에서 Manifest.permission.각자 필요한 권한 코드만 변경해주면 된다.

권한 목록들 안드로이드 개발자페이지 참고

https://developer.android.com/reference/android/Manifest.permission.html


도움이 되었다면 개발자분 깃허브에 가서

https://github.com/ParkSangGwon/TedPermission

요 버튼을 눌러주자


A1에 대한

B1에 민국


이라고 있을 때


이 두셀을 합치고 싶으면


셀 수식을 사용한다.



=TRIM(A1&""&B1)

결과 = 대한민국


한칸 띄울려면

=TRIM(A1&" "&B1)

결과 = 대한 민국



중간에 문자 포함하려면




=TRIM(A1&"-"&B1)

결과 = 대한-민국



또는 TRIM 없이 그냥 

=셀번호&셀번호 

해도 붙여진다.




중간에 넣고 싶은 문자가 있으면 따옴표로 구분

=셀번호&" - "&셀번호






두 단어를 줄바꿈으로 합치고 싶을 경우


먼저 셀 서식에서 줄바꿈을 지정해준다.



그런 다음 수식으로

=셀번호&CHAR(10)&셀번호


CHAR(10)을 넣어주면 아래와 같이 합쳐진다.








참고링크


http://blog.naver.com/battledocho/220035925900




1.18.2 패치 후에 배틀넷 들어가면 스타가 꺼져버리는 문제가 발생함





이 문제를 해결하기 위한 새로운 설치파일이 올라와있음

아래 링크로 이동하여 파일을 받아 설치하면 게임이 가능함


https://us.battle.net/forums/en/starcraft/topic/20754447051


위 링크에서 파일 받아서 설치하면 가능함

1.18.3 버전인데 1.18.2 유저와 게임은 같이 가능함


파일 링크


https://battle.net/download/getInstallerForGame?os=WIN&version=PTR&gameProgram=STARCRAFT




게임을 시작할 때 크래시가 발생하거나 Battle.net에 연결하거나 

게임을 만들 때 충돌이 발생하는 경우 Bonjour 서비스의 중단과 관련된 이러한 복잡한 문제를 해결할 수있는 새로운 빌드가 있습니다.


https://battle.net/download/getInstallerForGame?os=WIN&version=PTR&gameProgram=STARCRAFT


어떻게 작동하는지 알려주세요.












 관련 공지 링크


http://www.tworld.co.kr/normal.do?serviceId=S_ETC_0022&viewId=V_CMN_0005&serNum=20078


< cake 서비스 종료 안내 >

 

▶ 종료 서비스 : cake 서비스
▶ 서비스 종료 일자 : 2017년 03월 31일 (금)

 

▶가족나눔데이터 이용 방법 : 
① 가족나눔데이터는 cake 서비스와는 별도로 이용이 가능하므로, 데이터 나눠쓰기는 모바일/온라인 T world 에서 이용하시면 됩니다. 
② 가족나눔데이터 이용 방법
- 온라인 T world : my T > 조회 > 기본정보 > 사용중인 상품서비스 > (탭)결합상품 > 가족나눔 데이터
- 모바일 T world : my T > my이동전화 > 요금할인정보 > 요금할인혜택 > TB끼리 온가족 할인내역 확인하기 > 가족할인혜택 內 가족나눔데이터 클릭

 

▶ 앨범 사진/동영상 백업 안내 : 
① cake 서비스 종료 시, 앨범에 저장된 사진/동영상이 모두 삭제되므로 종료 전 사진/동영상을 백업하시기 바랍니다.
- 앨범 홈 > 오른쪽 상단 메뉴 선택 > 백업하기 선택 
※단, 일괄 백업 기능은 최신 버전에서만 가능하므로, 업데이트 필수

 

끝까지 최선을 다하여 서비스를 제공하겠습니다. 
그동안 cake 서비스를 이용해주셔서 감사합니다. 
 




모바일 티월드에서 위 경로로 진입한다음 화살표를 눌러 오른쪽으로 한칸 이동하면 메뉴가 나타난다.


1. my T 진입





2. 요금할인 정보 확인 탭






3. TB끼리 온가족 할인 내역 확인하기 탭







4. 상단 메뉴에 오른쪽 화살표 탭






5. 가족나눔 데이터 발견..






버튼 속성에


android:background="#00ff0000"  

를 추가해준다.




<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="#00ff0000" //투명
android:id="@+id/button" />




이런 Json배열 하나에 여러개의 Json이 있다고 가정했을 때


Json 값마다 있는 idx,link,description 키값을 사용해 데이터를 저장해보았다.

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
String eventArray = null//Json Array를 String으로 저장하기 위한 변수 선언
try {
    eventArray = loadHtml(); //loadHtml()는 Json Array를 파싱해서 String으로 가져오는 함수라 가정
catch (InterruptedException e) {
    e.printStackTrace();
}
System.out.println("결과물 : " + eventArray);
try {
    JSONArray array = new JSONArray(eventArray); //JSONArray형식으로 파싱하기 위해 새로 선언해주며 eventArray를 집어 넣어준다.
    list_cnt = array.length(); //Json 배열 내 JSON 데이터 개수를 가져옴
 
    //key의 value를 가져와 저장하기 위한 배열을 생성한다
    getDescription = new String[list_cnt]; //decription 저장용
    getLink = new String[list_cnt]; //link 저장용
    getImageUrl = new String[list_cnt]; //imageUrl 저장용
 
    for (int i = 0; i < list_cnt; i++) { //JSONArray 내 json 개수만큼 for문 동작
 
        JSONObject jsonObject = array.getJSONObject(i); //i번째 Json데이터를 가져옴
        getDescription[i] = jsonObject.getString("description");  //descripton 값을 배열에 저장
        getLink[i] = jsonObject.getString("link");  //link 값을 배열에 저장
        getImageUrl[i] = jsonObject.getString("imageUrl");  //imageurl 값을 배열에 저장
        Log.i("JSON Object", jsonObject + "");
        Log.i("JsonParsing", getDescription[i] + "," + getLink[i] + "," + getImageUrl[i]);
 
    }
cs


Log로 찍어보면

JsonObject의 로그

I/JSON Object: {"idx":15858,"imageUrl":"http:\/\/img.cgv.co.kr\/Event\/Event\/2017\/0330\/some_240x200_01.jpg","link":".\/detail-view.aspx?idx=15858&menu=2","description":"<어느날>1+1 예매 이벤트"}


파싱해낸 데이터 description, link, imageUrl 순으로 파싱이 된 걸 볼 수 있다.

I/JsonParsing: <어느날>1+1 예매 이벤트,./detail-view.aspx?idx=15858&menu=2,http://img.cgv.co.kr/Event/Event/2017/0330/some_240x200_01.jpg


배열에 잘 들어갔는지 description을 예로 확인을 해보면

for(int i=0;i<description.length;i++){
System.out.println("배열값 : "+description[i]);
}


I/System.out: 배열값 : <시간위의 집>스타★라이브톡

I/System.out: 배열값 : <보통사람>1+1 예매권 2차 이벤트

I/System.out: 배열값 : <로즈> 기대평 이벤트

I/System.out: 배열값 : <공각기동대:고스트 인 더 쉘>예매 경품 이벤트


description 값만 따로 배열에 잘 들어가있음을 확인할 수 있다.


이제 파싱해낸 값으로 다양한 곳에 쓸 수 있다.



  1. 2018.01.22 23:10

    비밀댓글입니다

subString 함수사용

subString(시작위치,끝위치);

예를 들어 애국가에서 

하느님이 ~ 우리나라만세 사이에 텍스트를 추출하고 싶다면

String song = "하느님이 보우하사 우리나라만세";

int start = song.indexOf("하느님이"); //하느님이 위치 추출

int end = song.indexOf("우리나라만세"); //우리나라만세 추출

String parseText = song.subString(start,end);

이런 방법도 있다



+ Recent posts