간단한 뉴스 앱 만들기 #5 - 인터넷 브라우저로 열기

이전에 NewsData 클래스에 url을 만들어두고, 또한 activity_main.xml LinearLayout에 id(LinearLayout_goChrome)를 미리 저장해 두었다.

일단 url을 설정을 해두고 layout을 통해 인터넷 브라우저를 열어보자.



url 설정

먼저 MainActivity에서 데이터를 받아오고 저장하는 단계를 보자.

StringRequest stringRequest = new StringRequest(Request.Method.GET, url,
    new Response.Listener<String>() {
        @Override
        public void onResponse(String response) {
            try {
                List<NewsData> newsList = new ArrayList<NewsData>();
                JSONArray arrayArticles =  new JSONObject(response).getJSONArray("items");
                for (int i = 0; i < arrayArticles.length(); i++) {
                    JSONObject obj = arrayArticles.getJSONObject(i);
                    NewsData news = new NewsData();
                    news.setTitle(obj.getString("title"));
                    news.setUrlToImage(obj.getString("image"));
                    news.setContent(obj.getString("description"));
                    newsList.add(news);
                }
                ...
            } catch (JSONException e) {
               ...
            }
        }
    }, ...);

여기서 url setter에 url을 저장하자.

StringRequest stringRequest = new StringRequest(Request.Method.GET, url,
    new Response.Listener<String>() {
        @Override
        public void onResponse(String response) {
            ...
                    news.setTitle(obj.getString("title"));
                    news.setUrlToImage(obj.getString("image"));
                    news.setContent(obj.getString("description"));
                    news.setLink(obj.getString("link"));
                    newsList.add(news);
            ...
            } catch (JSONException e) {
               ...
            }
        }
    }, ...);

url을 설정해두었으니 NewsActivity에서 이미지 및 제목을 클릭 시 브라우저로 해당 글을 열어보자.

 




브라우저 열기

activity_main.xml파일에서 이미지와 제목을 묶은 LinearLayout의 이름을 NewsActivity.class에 저장한다.
그리고 url을 저장할 string 변수를 미리 선언해두자.

public LinearLayout LinearLayout_goChrome;
public String url = "www.google.com";
...
LinearLayout_goChrome = findViewById(R.id.LinearLayout_goChrome);

앞에서 데이터를 받아 왔을 시점에 url도 같이 저장해 준다.

Intent intent = getIntent();
NewsData getNews = (NewsData) intent.getExtras().get("getNews");

url = getNews.getLink();

TextView_Title.setText(getNews.getTitle());
TextView_Content.setText(getNews.getContent());

Uri uri = Uri.parse(getNews.getUrlToImage());
ImageView_Title.setImageURI(uri);

해당 Layout을 클릭 가능한 상태와 클릭 리스너를 만들어 준다.

LinearLayout_goChrome.setClickable(true);
LinearLayout_goChrome.setEnabled(true);
        LinearLayout_goChrome.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {

    }
});

코드로 특정 사이트를 브라우저로 여는 방법은 Intent를 이용하는 것이다.

Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.google.com")); 
startActivity(intent);

과 같이 선언해 두면, 기본 브라우저로 해당 url을 열어준다고 한다.
이를 click리스너에 저장해두면 될 것이다.

 

우리는 url이라는 변수에 가고싶은 링크를 저장했으므로 다음과 같이 정의한다.

LinearLayout_goChrome.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
        startActivity(intent);
    }
});

여기까지 인터넷 브라우저로 우리가 원하는 링크를 띄우는데 성공했다.
그런데 기본 브라우저가 익스플로러가 아닌 크롬으로 하고 싶다면, 다음과 같은 코드를 추가한다.
intent.setPackage("com.android.chrome");

  • NewsActivity.class 전체코드

      package com.example.newstest;
    
      import ...
    
      public class NewsActivity extends AppCompatActivity {
          public TextView TextView_Title;
          public TextView TextView_Content;
          public SimpleDraweeView ImageView_Title;
          public LinearLayout LinearLayout_goChrome;
    
          public String url = "www.google.com";
    
          @Override
          protected void onCreate(Bundle savedInstanceState) {
              super.onCreate(savedInstanceState);
              setContentView(R.layout.activity_main);
              //Fresco.initialize(this);
    
              TextView_Title = findViewById(R.id.TextView_Title);
              TextView_Content = findViewById(R.id.TextView_Content);
              ImageView_Title = findViewById(R.id.ImageView_Title);
              LinearLayout_goChrome = findViewById(R.id.LinearLayout_goChrome);
    
              LinearLayout_goChrome.setClickable(true);
              LinearLayout_goChrome.setEnabled(true);
    
    
        Intent intent = getIntent();
        NewsData getNews = (NewsData) intent.getExtras().get("getNews");
        url = getNews.getLink();
        TextView_Title.setText(getNews.getTitle());
        TextView_Content.setText(getNews.getContent());

        Uri uri = Uri.parse(getNews.getUrlToImage());
        ImageView_Title.setImageURI(uri);

        LinearLayout_goChrome.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
                intent.setPackage("com.android.chrome");
                startActivity(intent);
            }
        });
    }
}
```
  • 실행 화면

  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기