
컴포넌트를 이용해 앱-앱 연동에서 <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()함수: 앱의 내부 저장 공간에 파일만들기 + 문자열 데이터 쓰기SharedPreferencesSharedPreferences: 앱의 데이터를 영속적으로 저장하기 위한 클래스데이터베이스 관리 시스템(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 | 외부 앱에서 쓰기 가능 |