컴포넌트를 이용해 앱-앱 연동에서 <permission>
부여시 그 앱을 이용하는 앱은 <uses-permission>
을 선언해야한다.
<Permisson>
<Permisson>
: 자신의 앱을 외부에서 이용할 때 권한을 부여, 권한을 가지고 들어올때만 실행 가능
<uses-permission>
: <Permisson>
이 선언된 앱을 이용하는 앱에 선언<activity android:name=".SomeActivity">
<intent-filter>
<action android:name="aaa"/>
<category android:name="android.intent.category.DEFAULT"/>
<intent-filter>
</activity>
/* permisson으로 보호하고 싶을 때 추가*/
<permisson android:name="com.test.permission.Some_PERMISSOION"
android: label = "SOME Permission"
android: description = "@string/permission"
android: protectionLevel="normal"/>
name: 퍼미션 이름
Label, description: 퍼미션에 대한 설명(사용자에게 보이는 문자열)
protectionLevel: 보호 수준
사용할 때
<activity android:name=".SomeActivity"
android:permission="com.test.permission,SOME_PERMISSON">
<intent-filter>
<action android:name="aaa"/>
<category android:name="android.intent.category.DEFAULT"/>
<intent-filter>
</activity>
/* uses-permission */
<uses-permission android:name="com.test.permission,SOME_PERMISSON">
normal은 권환 화면이 나오지 않는다
, dangerous는 시용자에게 권한을 부여할지 물어본다.
<uses-permission>
선언Permission | |
---|---|
ACCESS_FINE_LOCATION | 정확한 위치 정보 인덱스 |
ACCESS_NETWORK_STATE | 네트워크에 대한 정보 엑세스 |
ACCESS_WIFI_STATE | 와이파이 네트워크에 대한 정보 엑세스 |
BATTERY_STATS | 베터리 통계 수집 |
BLUETOOTH | 연결된 블루투스 장치에 연결 |
BLUETOOTH_ADMIN | 블루투스 장치를 검색하고 페어링 |
CALL_PHONE | 다이얼 UI 거치지 않고 전화 시작 |
CARMERA | 카메라 장치에 엑세스 |
INTERNET | 네트워크 연결 |
READ_CONTACTS | 사용자의 연락처 데이터 읽기 |
READ_EXTERNAL_STORAGE | 장치에 전화번호, 네트워크 정보, 통화상태 읽기 |
READ_SNS | 메세지 읽기 |
RECEIVE_BOOT_COMPLETED | 부팅 완료 시 수행 |
RECEIVE_SNS | sns 메세지 수신 |
RECORD_AUDIO | 오디오 녹음 |
SEND_SNS | 메세지 발신 |
WRITE_CONTACTS | 사용자 연락처 데이터 쓰기 |
WRITE_EXTERNAL_STORAGE | 외부 저장소에 파일 쓰기 |
if(ContextCompat.checkSelfPermission(this,
Manifest,permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) {
// ...
}
void requestPermissions(Activity activity, String[] permissions, int requestCode)
ActivityCompat.requestPermission(this,
new String[](Manifest.permission.READ_EXTERNAL_STORAGE},200)
// 사용자의 퍼미션 조정이 끝나면 대화상자 닫히고 다음 함수 호출
void onRequestPermissionsReult(int requestCode,
String[] permissions, int[] grantResults)
String state = Environment.getExternalStorageState();
if (state.equals(Environment.MEDIA_MOUNTED){
if(state.equals(Environment.MEDIA_MOUNTED_READ_ONLY){
externalStorageReadable = true;
externalStorageWritable = false;
} else{
externalStorageReadable = true;
externalStorageWritable = true;
}
else externalStroageReadable = externalStorageWritable = false;
}
Environment.getExternalStorageState()
: 외부 저장 공간에 대한 정보 획득MEDIA_MOUNTED
: 외부 저장공간을 제공한다는 의미Environment.MEDIA_MOUNTED_READ_ONLY
: 파일 읽고 쓰기 가능한지 판단 <manifest xmlns: android="http://schemas.android.com/apk/res/android"
package="com.example.test">
<uses-permission android:name = "android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<!--- 중략 -->
</manifest>
File tempFile = File.createTempFile("IMG", ".jpg", dir)
File file1 = new File(
Environment.getExternalStoragePublicDirectory(
Environment.DIRECTORY_PICTURES),"a.jpg")
경로 | |
---|---|
Environment.DIRECTORY_ALAMS | 알림으로 사용할 오디오 파일 저장 폴더 |
Environment.DIRECTORY_DCIM | 카메라로 촬영한 사진 저장 폴더 |
Environment.DIRECTORY_DOWNLOADS | 다운로드한 파일 저장 폴더 |
Environment.DIRECTORY_PICTURES | 이미지 파일 저장 폴더 |
getFileDir()
함수: 앱의 내부 저장 공간에 파일만들기 + 문자열 데이터 쓰기SharedPreferences
SharedPreferences
: 앱의 데이터를 영속적으로 저장하기 위한 클래스데이터베이스 관리 시스템(DBMS): key - value 형태로 저장
저장 데이터: xml 파일 형식, SharedPreferences
객체가 직접 파일 읽고써줌
SharedPreferences sharedPref = getPreferences(Context.MODE_PRIVATE);
SharedPreferences sharedPref = getSharedPreferences("my_pref",Context.MODE_PRIVATE);
SharedPreferences sharedPref = PreferenceManager.getDefualtSharedPreferences(this);
SharedPreferences 객체 획득 시 지정 mode:
mode | |
---|---|
MODE_PRIVATE | 자기 앱 내에서 사용, 외부 접근 불가 |
MODE_WORLD_READABLE | 외부 앱에서 읽기 가능 |
MODE_WORLD_WRITEABLE | 외부 앱에서 쓰기 가능 |