3개의 webview xml을 3개의 viewpager 에 각각 띄우기

각각의 웹뷰에서 자바스크립트 변수 넘길 수 있도록





1. main_layout.xml


    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

        android:layout_width="match_parent"

        android:layout_height="match_parent"

        android:orientation="vertical" >


<LinearLayout 

   android:id="@+id/ll_title_layout"

   android:layout_width="fill_parent"

   android:layout_height="30dip"

   >

    <Button

        android:id="@+id/btn_one"

        android:layout_width="140dip"

     android:layout_height="30dip"

     android:text="ViewPager1"

     android:textSize="16sp"

     android:textColor="#FFFFFF"

     android:layout_marginLeft="5dp"

     android:layout_marginRight="5dp"

   

        />

    <Button

        android:id="@+id/btn_two"

        android:layout_width="100dip"

     android:layout_height="30dip"

     android:text="ViewPager2"

     android:textSize="16sp"

     android:layout_marginRight="5dp"

   

    />

    <Button

        android:id="@+id/btn_three"

        android:layout_width="100dip"

     android:layout_height="30dip"

     android:text="ViewPager3"

     android:textSize="16sp"

  

      />

</LinearLayout> 

               


        <android.support.v4.view.ViewPager

            android:id="@+id/pager"

            android:layout_width="match_parent"

            android:layout_height="750dp" />


</LinearLayout> 




2. webview 레이아웃 3개


inflate_one.xml

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

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

    android:id="@+id/inflate_one"

    android:layout_width="fill_parent"

    android:layout_height="fill_parent"

    android:orientation="vertical" 

    >

    <WebView

        android:id="@+id/webView1"

        android:layout_width="match_parent"

        android:layout_height="750dp"

        />

   

         

</RelativeLayout>




inflate_two.xml

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

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

    android:id="@+id/inflate_one"

    android:layout_width="fill_parent"

    android:layout_height="fill_parent"

    android:orientation="vertical" 

    >

    <WebView

        android:id="@+id/webView2"

        android:layout_width="match_parent"

        android:layout_height="750dp"

        />

   

         

</RelativeLayout>




inflate_three.xml

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

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

    android:id="@+id/inflate_one"

    android:layout_width="fill_parent"

    android:layout_height="fill_parent"

    android:orientation="vertical" 

    >

    <WebView

        android:id="@+id/webView3"

        android:layout_width="match_parent"

        android:layout_height="750dp"

        />

   

         

</RelativeLayout>







3. MainActivity.java


public class MainActivity extends FragmentActivity implements OnRefreshListener {


private ViewPager mPager;

WebView web;



@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main_layout);


mPager = (ViewPager)findViewById(R.id.pager);

mPager.setAdapter(new PagerAdapterClass(getApplicationContext()));


//viewpager의 현재 위치 

mPager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {

            @Override

            public void onPageSelected(int position) {

   //여기에 할일

            }

        });




//버튼으로 viewpager이동하기

       Button btn_one = (Button)findViewById(R.id.btn_one);

       Button btn_two = (Button)findViewById(R.id.btn_two);

       Button  btn_three = (Button)findViewById(R.id.btn_three);

        

        btn_one.setOnClickListener(new OnClickListener(){

public void onClick(View v){

setCurrentInflateItem(0);

}

    });

        btn_two.setOnClickListener(new OnClickListener(){

        public void onClick(View v){

         setCurrentInflateItem(1);

        }

        });

        

        btn_three.setOnClickListener(new OnClickListener(){

        public void onClick(View v){

         setCurrentInflateItem(2);

        }

        });

        




}




//viewpager 이동 

private void setCurrentInflateItem(int type){

if(type==0){

mPager.setCurrentItem(0);

}else if(type==1){

mPager.setCurrentItem(1);

}else{

mPager.setCurrentItem(2);

 

}


}




//Pager 어댑터

private class PagerAdapterClass extends PagerAdapter{

private LayoutInflater mInflater;


public PagerAdapterClass(Context c){

super();

mInflater = LayoutInflater.from(c);

}


@Override

public int getCount() {

return 3;

}


@Override

public Object instantiateItem(View pager, int position) {

View v = null;

    if(position==0){//첫번째 뷰페이저

    v = mInflater.inflate(R.layout.inflate_one, null);

    

 

String url_web1 = "http://www.test.com/test_web1.html";

    WebView web1 = (WebView)v.findViewById(R.id.webView1);

       

    

    WebSettings set1 = web1.getSettings();

    set1.setJavaScriptEnabled(true);

    set1.setAllowFileAccess(true);

            web1.loadUrl(url_web1);

 web1.addJavascriptInterface(this, "android");

            web1.addJavascriptInterface(new JavaScriptInterface(web2.getContext()), "android");

    


    }

    else if(position==1){

    v = mInflater.inflate(R.layout.inflate_two, null);

     final String url_web2 = "http://www.test.com/test_web2.html";

     final WebView web2 = (WebView)v.findViewById(R.id.webView2);


     WebSettings set2 = web2.getSettings();

    set2.setJavaScriptEnabled(true);    

          web2.loadUrl(url_web3);

     web2.addJavascriptInterface(this, "android");

            web2.addJavascriptInterface(new JavaScriptInterface(web2.getContext()), "android");

   

    


    }else{

    v = mInflater.inflate(R.layout.inflate_three, null);

    

     final String url_web3 = "http://www.test.com/test_web3.html";

     final WebView web3 = (WebView)v.findViewById(R.id.webView3);


     WebSettings set3 = web3.getSettings();

     set3.setJavaScriptEnabled(true);    

          web3.loadUrl(url_web3);

     web3.addJavascriptInterface(this"android");

             web3.addJavascriptInterface(new JavaScriptInterface(web3.getContext()), "android");

    }

    

         

    ((ViewPager)pager).addView(v, 0);

    

    return v; 

}



@Override

public void destroyItem(View pager, int position, Object view) {

((ViewPager)pager).removeView((View)view);

}

@Override

public boolean isViewFromObject(View pager, Object obj) {

return pager == obj; 

}


@Override public void restoreState(Parcelable arg0, ClassLoader arg1) {}

@Override public Parcelable saveState() { return null; }

@Override public void startUpdate(View arg0) {}

@Override public void finishUpdate(View arg0) {}


}





//자바스크립트 인터페이스

public class JavaScriptInterface {


private Context mContext;

JavaScriptInterface(Context c){

mContext = c;

}


@JavascriptInterface  

public void viewTest(String id, String title) { //웹뷰 내에서 호출하는 자바스크립트 함수와 연동 정의

      Intent it = new Intent();

      it.setClass(MainActivity.this,  ViewActivity.class);

      it.putExtra("id", id);

      it.putExtra("title", title);


      startActivityForResult(it, 0);  


}  

}




}






4. test_web1.html ... 나머지 파일도 비슷하게..


<!doctype html>

<html lang="ko">

 <head>

  <meta charset="UTF-8">


<script>

function viewTest(id, title){

android.viewTest(id, title);//연동함수 호출

}


</script>

 </head>

 

 <body> 

<a href="viewTest('1','제목');">보기</a> 


 </body>

</html>

블로그 이미지

엘로드넷

,

빨간색 부분은 사용자 환경에 맞게 조정





1. 폼작성 페이지

<html>

<head></head>

<body>

<div >

<h1>GCM 메세지 전송</h1>

<form method="post" action="./gcm_send.php/?push=true" >                                                      

<input type="hidden" name="push" value="true">

<textarea rows="5" name="message" cols="45" placeholder="메세지 입력"></textarea> <br/>

<input type="submit"  value=" 전송하기 " />

</form>

</div>

    

    </body>

</html>






2. GCM전송 페이지 : gcm_send.php


<?php



//디비연결

include $_SERVER['DOCUMENT_ROOT'] . "/db_connect.php";



//GCM전송 함수 

     function sendMessageThroughGCM($registatoin_ids, $message) {

        $url = 'https://android.googleapis.com/gcm/send';

        $fields = array(

            'registration_ids' => $registatoin_ids,

            'data' => $message,

        );


define("GOOGLE_API_KEY", "구글API키값");

        $headers = array(

            'Authorization: key=' . GOOGLE_API_KEY,

            'Content-Type: application/json'

        );

        $ch = curl_init();

        curl_setopt($ch, CURLOPT_URL, $url);

        curl_setopt($ch, CURLOPT_POST, true);

        curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

curl_setopt ($ch, CURLOPT_SSL_VERIFYHOST, 0);

        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

        curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($fields));

        $result = curl_exec($ch);

        if ($result === FALSE) {

            die('Curl failed: ' . curl_error($ch));

        }

        curl_close($ch);

        return $result;

    }




//GCM메시지 전송

if(!empty($_POST["push"])) {

$pushMessage = $_POST["message"];

$pushMessage = urlencode($pushMessage);





//DB에서 전송할 기기아이디 조회

$reg_ids = array();

$sql = "SELECT and_reg_id FROM GCM_PUSH ";

$result = mysql_query($sql);

while($data = mysql_fetch_array($result)){

array_push($reg_ids, $data['and_reg_id']); 

}



$title = "GCM 알림!";

$title = urlencode($title);







  //JSON형태로 보냄 : 메세지 본문은 $pushMessage, 기타 값들을 추가해서 보낼 수 있다.

if (isset($reg_ids) && isset($pushMessage)) {

$message = array(

"ellord" => $pushMessage,

"extra" => $title


);

$pushStatus = sendMessageThroughGCM($reg_ids, $message);

}

}


?>



3. 기기에서 확인



끝.






블로그 이미지

엘로드넷

,

Android Studio for Mac

Android 2015. 9. 23. 11:07

안드로이드 스튜디오 맥용 설치


이클립스에서 adt사용시 뭔 에러가 많이 나는지 안드로이드 스튜디오를 사용해 보기로 한다.


1. 설치된 자바 버전 확인


ELLORDNET-MPR:~ ellord$ java -version

java version "1.7.0_40"

Java(TM) SE Runtime Environment (build 1.7.0_40-b43)

Java HotSpot(TM) 64-Bit Server VM (build 24.0-b56, mixed mode)

ELLORDNET-MPR:~ ellord$ 


1.7 버전이 설치되어 있는 것으로 확인된다.




2. 구글에서 android studio canary 로 검색하여 제일 첫번째 검색결과에 Latest Android Studio Canary Build: 1.x... 이 나온다.

링크를 클릭하고 들어가면 아래와 같이 나온다.





Mac 용 링크를 클릭해서 다운받는다.




3. 다운받은 후 자동으로 압축이 풀리고 다운받은 장소에

Android Studio 응용프로그램이 생겨 있을 것이다.


이 파일을 응용 프로그램에 넣어준다.



4. 응용프로그램 폴더로 가서 좀 전에 넣은 Android Studio 에서 마우스 우측클릭하여 (또는 Ctrl + 클릭) 패키지 내용보기로 들어간다.


Contents 폴더가 보이고 그 안에 여러 폴더와 info.plist 파일이 있다.


info.plist 파일을 텍스트편집 프로그램으로 연다.


<key>JVMVersion</key> 부분을 찾는다.



      <key>JVMVersion</key>

      <string>1.6*,1.7+</string>


<string></string> 부분에 아까 확인했던 자바 버전이 들어 있는지 확인한다.



5. Android Studio 를 실행한다.


처음 실행하면 설치 완료를 위해 몇가지 물어본다. 처음 설치하는 경우이기에 기본으로 선택된 상태로 진행한다.



블로그 이미지

엘로드넷

,

GCM-SERVER java 버전


1. 이클립스에서 java 프로젝트를 하나 만든다


2. 아래 두 파일을 프로젝트에 복사해 주고, Build Path에 추가해 준다(각 파일 위에서 마우스 우클릭해서 Build Path > Add to Build Path)



gcm-server.jar



json-simple-1.1.1.jar



3. 클래스를 하나 만들고 아래 내용으로 넣어준다. (클래스명 : GCMServer )



import java.io.IOException;

import java.util.ArrayList;

import java.util.List;

 


import com.google.android.gcm.server.Message;

import com.google.android.gcm.server.MulticastResult;

import com.google.android.gcm.server.Result;

import com.google.android.gcm.server.Sender;



public class GCMServer {


public void sendMessage() throws IOException {

 

Sender sender = new Sender("AIzaSyB6IJ7UCK7tEZH0....");

 

 

 

String regId = "APA91bFeaauC0WNL5m2NlP-_g794KMJXR-AlrO9i9-myyZegpc3ufxG3rB3ciibCRHfQtjfg95WPE8TMKhbwz0HqvHBwrxSVJFz2zrpM-...........";

 

 

 

Message message = new Message.Builder().addData("msg", "push notify test").build();

 

 

 

List<String> list = new ArrayList<String>();

 

list.add(regId);

 

 

 

MulticastResult multiResult = sender.send(message, list, 5);

 

 

 

if (multiResult != null) {

 

List<Result> resultList = multiResult.getResults();

 

 

 

for (Result result : resultList) {

 

System.out.println(result.getMessageId());

 

}

 

}

}

public static void main(String[] args) throws Exception {

 

GCMServer s = new GCMServer();

 

s.sendMessage();

 

}

 

}



4. 프로젝트를 실행해 본다(Run AS > Java Application)



5. 해당 기기에서 푸시가 오는지 확인해 본다.




블로그 이미지

엘로드넷

,

안드로이드 킷캣에서.


import android.os.StrictMode;



if (android.os.Build.VERSION.SDK_INT > 9) {

    StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();

    StrictMode.setThreadPolicy(policy);

}

블로그 이미지

엘로드넷

,

이클립스 


Window > Customize Perspective > Command Groups Availability


Android SDK and AVD Manager 체크



끝.

블로그 이미지

엘로드넷

,

1. 첫번째 방법 : Activity 에 적용


requestWindowFeature(Window.FEATURE_NO_TITLE);



super.onCreate 앞에 선언함

아래와 같이.



protected void onCreate(Bundle savedInstanceState) {

requestWindowFeature(Window.FEATURE_NO_TITLE);


super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);


~~~~~~~




2. 두번째 방법 : 스타일 사용


styles.xml 에 아래 내용 추가


   <style name="Theme.AppCompat.Light.NoActionBar" parent="@style/Theme.AppCompat.Light">

        <item name="android:windowNoTitle">true</item>

        <item name="windowActionBar">false</item> <!-- For 2.x version  -->

   </style>



AndroidManifest.xml 에 android:theme 으로 적용


    <application

        android:allowBackup="true"

        android:icon="@drawable/ic_launcher"

        android:label="@string/app_name"

        android:theme="@style/Theme.AppCompat.Light.NoActionBar"

        >

~~~~~~

블로그 이미지

엘로드넷

,

Multiple annotations found at this line:

- The resource R.string.hello_world appears to be unused

- "hello_world" is not translated in "af" (Afrikaans), "am" (Amharic), "ar" (Arabic), "bg" (Bulgarian), "ca" (Catalan), "cs" (Czech), "da" (Danish), "de" (German), "el" (Greek), "en-rGB" (English: United Kingdom), 

"en-rIN" (English: India), "es" (Spanish), "es-rUS" (Spanish: United States), "et-rEE" (Estonian: Estonia), "fa" (Persian), "fi" (Finnish), "fr" (French), "fr-rCA" (French: Canada), "hi" (Hindi), "hr" (Croatian), 

"hu" (Hungarian), "hy-rAM" (Armenian: Armenia), "in" (Indonesian), "it" (Italian), "iw" (Hebrew), "ja" (Japanese), "ka-rGE" (Georgian: Georgia), "km-rKH" (Khmer: Cambodia), "ko" (Korean), "lo-rLA" (Lao: Lao 

People's Democratic Republic), "lt" (Lithuanian), "lv" (Latvian), "mn-rMN" (Mongolian: Mongolia), "ms-rMY" (Malay: Malaysia), "nb" (Norwegian Bokmål), "nl" (Dutch), "pl" (Polish), "pt" (Portuguese), "pt-

rPT" (Portuguese: Portugal), "ro" (Romanian), "ru" (Russian), "sk" (Slovak), "sl" (Slovene), "sr" (Serbian), "sv" (Swedish), "sw" (Swahili), "th" (Thai), "tl" (Tagalog), "tr" (Turkish), "uk" (Ukrainian), "vi" (Vietnamese), "zh-

rCN" (Chinese: China), "zh-rHK" (Chinese: Hong Kong), "zh-rTW" (Chinese: Taiwan, Province of China), "zu" (Zulu)




1. 프로젝트 > Properties > Android Lint Prefereces


2. trans 로 검색


3. 검색된 목록에서 


ExtraTranslation 항목 클릭 > 우측 하단에 Severity : Fatal --> Warning 등 다른 것으로 변경

MissingTranslation 항목 클릭 > 우측 하단에 Severity : Fatal --> Warning 등 다른 것으로 변경


적용




끝.

블로그 이미지

엘로드넷

,

"app_name" is not translated in "af" (Afrikaans), "am" (Amharic), "ar" (Arabic), "bg" (Bulgarian), "ca" (Catalan), "cs" (Czech), "da" (Danish), "de" (German), "el" (Greek), "en-rGB" (English: United Kingdom), "en-

 rIN" (English: India), "es" (Spanish), "es-rUS" (Spanish: United States), "et-rEE" (Estonian: Estonia), "fa" (Persian), "fi" (Finnish), "fr" (French), "fr-rCA" (French: Canada), "hi" (Hindi), "hr" (Croatian), 

 "hu" (Hungarian), "hy-rAM" (Armenian: Armenia), "in" (Indonesian), "it" (Italian), "iw" (Hebrew), "ja" (Japanese), "ka-rGE" (Georgian: Georgia), "km-rKH" (Khmer: Cambodia), "ko" (Korean), "lo-rLA" (Lao: Lao 

 People's Democratic Republic), "lt" (Lithuanian), "lv" (Latvian), "mn-rMN" (Mongolian: Mongolia), "ms-rMY" (Malay: Malaysia), "nb" (Norwegian Bokmål), "nl" (Dutch), "pl" (Polish), "pt" (Portuguese), "pt-

 rPT" (Portuguese: Portugal), "ro" (Romanian), "ru" (Russian), "sk" (Slovak), "sl" (Slovene), "sr" (Serbian), "sv" (Swedish), "sw" (Swahili), "th" (Thai), "tl" (Tagalog), "tr" (Turkish), "uk" (Ukrainian), "vi" (Vietnamese), 

 "zh-rCN" (Chinese: China), "zh-rHK" (Chinese: Hong Kong), "zh-rTW" (Chinese: Taiwan, Province of China), "zu" (Zulu)




1. 프로젝트 > Properties > Android Lint Prefereces


2. trans 로 검색


3. 검색된 목록에서 


ExtraTranslation 항목 클릭 > 우측 하단에 Severity : Fatal --> Warning 등 다른 것으로 변경

MissingTranslation 항목 클릭 > 우측 하단에 Severity : Fatal --> Warning 등 다른 것으로 변경


적용




끝.

블로그 이미지

엘로드넷

,
안드로이드 네이버 밴드 공유


try {
	PackageManager manager = context.getPackageManager();
	Intent i = manager.getLaunchIntentForPackage("com.nhn.android.band");
} catch (PackageManager.NameNotFoundException e) {
	// 밴드앱 설치되지 않은 경우 구글 플레이 설치페이지로 이동
	Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=com.nhn.android.band"));
	activity.startActivity(intent);
	return;  
}

String serviceDomain = "www.myapp.net"; //  연동 서비스 도메인
String encodedText = "%ED%85%8C%EC%8A%A4%ED%8A%B8+%EB%B3%B8%EB%AC%B8"; // 글 본문 (utf-8 urlencoded)
Uri uri = Uri.parse("bandapp://create/post?text" + encodedText + "&route=" + serviceDomain);
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
activity.startActivity(intent);	


출처 : https://developers.band.us/developers/ko/docs/share#format_app





블로그 이미지

엘로드넷

,