Android Camera 권한

Programming/Android 2018. 3. 6. 20:08 Posted by TanSanC
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

Android Camera 권한


Android M 이후 버전에서는 


팝업으로 사용자에게 권한을 받아한다.



/**********권한 요청************/
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
/**
* 사용자 단말기의 권한 중 "카메라" 권한이 허용되어 있는지 확인한다.
* Android는 C언어 기반으로 만들어졌기 때문에 Boolean 타입보다 Int 타입을 사용한다.
*/
int permissionResult = checkSelfPermission(Manifest.permission.CAMERA);


/** * 패키지는 안드로이드 어플리케이션의 아이디이다. *
* 현재 어플리케이션이 카메라에 대해 거부되어있는지 확인한다. */
if (permissionResult == PackageManager.PERMISSION_DENIED) {


/** * 사용자가 CALL_PHONE 권한을 거부한 적이 있는지 확인한다. *
* 거부한적이 있으면 True를 리턴하고 *
* 거부한적이 없으면 False를 리턴한다. */
if (shouldShowRequestPermissionRationale(Manifest.permission.CAMERA)) {
AlertDialog.Builder dialog = new AlertDialog.Builder(MainActivity.this);
dialog.setTitle("권한이 필요합니다.").setMessage("이 기능을 사용하기 위해서는 단말기의 \"카메라\" 권한이 필요합니다. 계속 하시겠습니까?")
.setPositiveButton("네", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {

/** * 새로운 인스턴스(onClickListener)를 생성했기 때문에 *
* 버전체크를 다시 해준다. */
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
// CALL_PHONE 권한을 Android OS에 요청한다.
requestPermissions(new String[]{Manifest.permission.CAMERA}, 1000);
}
}
})
.setNegativeButton("아니요", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(MainActivity.this, "기능을 취소했습니다", Toast.LENGTH_SHORT).show();
}
}).create().show();


return -1;
// need to retry
}
// 최초로 권한을 요청할 때
else {
// CALL_PHONE 권한을 Android OS에 요청한다.
requestPermissions(new String[]{Manifest.permission.CAMERA}, 1000);
}
}
// CALL_PHONE의 권한이 있을 때
else {
}
}
/************권한요청 끝**************/






Android SignalR Sample

Programming/Android 2016. 6. 25. 15:37 Posted by TanSanC
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

http://xinics.tistory.com/100



Android 위치 추적, 기록

Programming/Android 2016. 4. 11. 09:54 Posted by TanSanC
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

안드로이드폰을 분실하였거나


위치 기록을 조회하는 방법을 알아 보겠습니다.


1. 위치 기록 조회


https://maps.google.com/locationhistory/



연도별, 월별, 일별 스마트폰의 위치를 확인 할 수 있습니다.





이렇게 타임라인 전체를 볼 수도 있고





이렇게 하루 동안의 경로를 확인 할 수도 있습니다.





2. 안드로이드 폰 현재 위치 확인


안드로이드 기기 관리자를 통한 현재 위치 확인, 벨 울리기, 잠금, 초기화


https://www.google.com/android/devicemanager




이렇게 현재의 위치를 확인 할 수 있습니다.



이런 기능들을 활용하려면 평소에 GPS 기능을 켜두고 다니는게 좋습니다.



배터리 소모가 걱정 된다면 GPS 위성 사용만 켜두고

3G/4G/Wi-Fi 위치 사용은 꺼두면 켜둔거 만큼 정확하진 않지만

대략적인 위치를 알수 있으면서 배터리 소모가 많지 않기에

GPS 위성 사용만 켜두고 사용하시는걸 추천합니다.










336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

http://venturebeat.com/2015/12/31/software-with-the-most-vulnerabilities-in-2015-mac-os-x-ios-and-flash/



Which software had the most publicly disclosed vulnerabilities this year? The winner is none other than Apple’s Mac OS X, with 384 vulnerabilities. The runner-up? Apple’s iOS, with 375 vulnerabilities.

Rounding out the top five are Adobe’s Flash Player, with 314 vulnerabilities; Adobe’s AIR SDK, with 246 vulnerabilities; and Adobe AIR itself, also with 246 vulnerabilities. For comparison, last year the top five (in order) were: Microsoft’s Internet Explorer, Apple’s Mac OS X, the Linux Kernel, Google’s Chrome, and Apple’s iOS.

These results come from CVE Details, which organizes data provided by the National Vulnerability Database (NVD). As its name implies, the Common Vulnerabilities and Exposures (CVE) system keeps track of publicly known information-security vulnerabilities and exposures.

Here is the 2015 list of the top 50 software products in order of total distinct vulnerabilities:

cve_top_50_2015

You’ll notice that Windows versions are split separately, unlike OS X. Many of the vulnerabilities across various Windows versions are the same, so there is undoubtedly a lot of overlap. The argument for separating them is probably one of market share, though that’s a hard one to agree to, given that Android and iOS are not split into separate versions. This is the nature of CVEs.

It’s also worth pointing out that the Linux kernel is separate from various Linux distributions. This is likely because the Linux kernel can be upgraded independently of the rest of the operating system, and so its vulnerabilities are split off.

If we take the top 50 list of products and categorize them by company, it’s easy to see that the top three are Microsoft, Adobe, and Apple:

cve_top_50_company_2015

Keep in mind that tech companies have different disclosure policies for security holes. Again, this list paints a picture of the number of publicly known vulnerabilities, not of all vulnerabilities, nor of the overall security of a given piece of software.

If you work in IT, or are generally responsible for the security of multiple systems, there are some obvious trends to keep in mind. Based on this list, it’s clear you should always patch and update operating systems, browsers, and Adobe’s free products.

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

Android , OpenCV 연동하여 카메라 촬영시 해상도 문제



params.setPictureSize(resolution.width, resolution.height); params.setPreviewSize(resolution.width, resolution.height);


Picture Size 실제 찍히는 사진 사이즈와


Preview Size 미리보기로 나오는 화면 사이즈가 별도로 존재하니 꼭 확인 바랍니다.



336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

Opencv 안드로이드 연동 중 Resolution 설정 문제시


mOpenCvCameraView를 이용하여 코드 작성중

Resolution 관련 코드가 안 먹는 경우

화면의 크기가 변경할 Resolution 으로 같이 변하지 못할때 이런 현상이 발생한다.




getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);

를 onCreate 부분에 추가하여 주면


해상도 변경시 화면의 사이즈도 같이 변경된다.


Android Studio 1.4 and OpenCV 3.0.0 연동

Programming/Android 2015. 12. 19. 02:39 Posted by TanSanC
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

Android Studio 1.4 and OpenCV 3.0.0 연동


Android Studio 1.4


https://dl.google.com/dl/android/studio/install/1.4.0.10/android-studio-bundle-141.2288178-windows.exe


OpenCV_Java_AndroidStudio

https://github.com/quanhua92/OpenCV_Java_AndroidStudio



336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

public void onClick(View v) {

if (alButtonBool.get(buttonNum) == false) {

alButtonBool.set(buttonNum, true);


if (media_player_red_filePath.get(index) == "") {

media_player_red[index] = MediaPlayer.create(

mContext, raw);

} else {

media_player_red[index] = new MediaPlayer();

try {

media_player_red[index]

.setDataSource(media_player_red_filePath

.get(index));

} catch (Exception e) {

e.printStackTrace();

}

}

media_player_red[index]

.setOnPreparedListener(mPreparedListener);

media_player_red[index].setVolume(media_player_red_Volume,

media_player_red_Volume);

try {

media_player_red[index].prepare();


} catch (IllegalStateException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

} else {

media_player_red[index].release();

media_player_red[index] = null;

alButtonBool.set(buttonNum, false);

}

}

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

public boolean onTouch(View v, MotionEvent event) {

switch (event.getAction()) {

case MotionEvent.ACTION_DOWN:

if (media_player_ye_state.get(index) == false) {

media_player_ye_state.set(index, true);


if (media_player_ye_filePath.get(index) == "") {

media_player_ye[index] = MediaPlayer.create(

mContext, raw);

} else {

media_player_ye[index] = new MediaPlayer();

try {

media_player_ye[index]

.setDataSource(media_player_ye_filePath

.get(index));

} catch (Exception e) {

e.printStackTrace();

}

}

media_player_ye[index]

.setOnPreparedListener(mPreparedListener);

media_player_ye[index].setVolume(

media_player_ye_Volume, media_player_ye_Volume);

media_player_ye[index].setLooping(true); // 반복재생

alButton.get(buttonNum).setPressed(true);

try {

media_player_ye[index].prepare();

} catch (Exception e) {

e.printStackTrace();

}

}

return true;

case MotionEvent.ACTION_UP:

alButton.get(buttonNum).setPressed(false);

media_player_ye_state.set(index, false);

try {

media_player_ye[index].release();

} catch (Exception e) {

media_player_ye[index] = null;

e.printStackTrace();

}

return true;

}

return false;

}

MediaPlayer Source 선택

Programming/Android 2015. 11. 16. 01:05 Posted by TanSanC
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

MediaPlayer Source 선택


res/raw 폴더의 music.mp3 파일


MainActivity 에서 사용한다면


mMediaPlayer = MediaPlayer.create(MainActivity.this, r.raw.music);


File Chooser 를 통해 얻은 경로에 있는 파일을 


MainActivity 에서 사용한다면


mMediaPlayer = new MediaPlayer();

try {

mMediaPlayer.setDataSource(mFilePath);

} catch (Exception e) {

e.printStackTrace();

}