티스토리 뷰
실제 앱을 개발할 때, 직접 내용 제공자를 사용하는 일보다 이미 존재하는 내용 제공자를 사용해야 하는 경우가 더 많을 것이다.
그 중 앨범이나 연락처에 있는 데이터를 조회하는 경우가 내용 제공자를 사용하는 가자우 대표적인 경우라고 할 수 있다.
이번 포스팅은 앨범을 조회하여 간단하게 이미지 뷰에 띄우는 예제를 확인해보려고 한다.
우선, 앨범을 가져와야 하는 위험 권한을 설정해줘야 하므로 매니페스트 파일에서 권한 설정과 어플이 실행되었을 때 권한을 허용할 수 있도록 해줘야 한다.
◎AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.ssssssdead">
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.Ssssssdead">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
</application>
</manifest>
다음으로 Intent 객체를 하나 생성하여 해당 Intent 객체의 MIME 타입과 액션 정보를 지정한 뒤, startActivity()를 호출하여 해당 intent 객체가 액티비티를 띄우도록 설정해준다.
Intent 객체가 성공적으로 액티비티를 띄우고 결과를 가져올 때, 콜백 메서드에서 ContentResolver를 실행하여 이미지 Stream을 Bitmap 객체로 만들고 이미지 뷰에 삽입되도록 설정해준다.
◎MainActivity.java
package com.example.ssssssdead;
import android.app.Activity;
import android.content.ContentResolver;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import androidx.activity.result.ActivityResult;
import androidx.activity.result.ActivityResultCallback;
import androidx.activity.result.ActivityResultLauncher;
import androidx.activity.result.contract.ActivityResultContracts;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import com.yanzhenjie.permission.Action;
import com.yanzhenjie.permission.AndPermission;
import com.yanzhenjie.permission.runtime.Permission;
import java.io.InputStream;
import java.util.List;
public class MainActivity extends AppCompatActivity {
ImageView imageView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
AndPermission.with(this)
.runtime()
.permission(Permission.READ_EXTERNAL_STORAGE)
.onGranted(new Action<List<String>>() {
@Override
public void onAction(List<String> permissions) {
}
})
.onDenied(new Action<List<String>>() {
@Override
public void onAction(List<String> permissions) {
}
})
.start();
imageView = findViewById(R.id.imageView);
Button button = findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
openGallery();
}
});
}
public void openGallery() {
Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
mGetContent.launch(intent);
}
ActivityResultLauncher<Intent> mGetContent = registerForActivityResult(
new ActivityResultContracts.StartActivityForResult(),
new ActivityResultCallback<ActivityResult>() {
@Override
public void onActivityResult(ActivityResult result) {
if(result.getResultCode() == Activity.RESULT_OK) {
Intent data = result.getData();
Uri fileUri = data.getData();
ContentResolver resolver = getContentResolver();
try{
InputStream inputStream = resolver.openInputStream(fileUri);
Bitmap bitmap = BitmapFactory.decodeStream(inputStream);
imageView.setImageBitmap(bitmap);
} catch (Exception e) {
e.printStackTrace();
}
}
}
});
}
반응형
'Mobile > Android' 카테고리의 다른 글
[Android] Content Provider 3: 주소록 조회 (0) | 2022.04.14 |
---|---|
[Android] startActivityForResult() < deprecated > (0) | 2022.04.14 |
[Android] Content Provider 1: Content Provider (0) | 2022.04.13 |
[Android] Database 3: 데이터 조회 (0) | 2022.04.12 |
[Android] Database 2: Helper for schema updating (0) | 2022.04.12 |
Comments
최근에 올라온 글
최근에 달린 댓글
TAG
- AsyncStorage
- 정보보안기사 #실기 #정리
- 맛집
- Async
- await
- 인천 구월동 맛집
- 인천 구월동 이탈리안 맛집
- react-native
- redux
- 파니노구스토
- react
- redux-thunk
- Promise
- javascript
- 이탈리안 레스토랑
- Total
- Today
- Yesterday