2017.02.19 01:07


Color 지정방법에 대한 다양한 방법 소개


You can use various functions from the Color class to get the same effect of course.

  • holder.text.setTextColor(Color.RED);

  • Color.parseColor (Manual) (like LEX uses)

    text.setTextColor(Color.parseColor("#FFFFFF"));
  • Color.rgb and Color.argb (Manual rgb) (Manual argb) (like Ganapathy uses)

    holder.text.setTextColor(Color.rgb(200,0,0));
    holder.text.setTextColor(Color.argb(0,200,0,0));
  • And of course, if you want to define your color in an XML file, you can do this:

    <color name="errorColor">#f00</color>

    because the getColor() function is deprecated1, you need to use it like so:

    ContextCompat.getColor(context, R.color.your_color);
  • You can also insert plain HEX, like so:

    myTextView.setTextColor(0xAARRGGBB);

    Where you have an alpha-channel first, then the color value.

Check out the complete manual of course, public class Color extends Object.


https://developer.android.com/reference/android/graphics/Color.html#parseColor(java.lang.String)



저작자 표시
신고


Posted by injunech
2017.02.15 09:31


타이젠 네이티브 앱을 개발하려면 네이티브 API를 사용해야합니다.

그리고 일부 네이티브 API는 별도의 Privilege 권한이 있어야 사용할 수 있습니다.


타이젠 네이티브 API에 어떤 Privilege가 있는지 살펴보고,

어떤 식으로 관리되고 있는지 훔쳐보도록 하겠습니다.


Tizen 2.3으로 오픈된 소스를 기반으로 정리하였습니다.



타이젠 SDK에서 관리하는 Privilege를 찾아보았습니다.

git://review.tizen.org/sdk/doc/content의 master브랜치,

api-reference/native/tools/privilege_desc.txt 파일에 Privilege가 명시되어 있습니다.

privilege_desc.txt를 그대로 가져오고,

각각 한글로 간단하게 번역해두었습니다.


http://tizen.org/privilege/account.read
Allows the application to read accounts.
계정을 읽을 수 있습니다.

http://tizen.org/privilege/account.write    
Allows the application to create, update, and delete accounts.    
계정을 생성, 수정, 삭제할 수 있습니다.

http://tizen.org/privilege/alarm    
Allows the application to set an alarm and wake the device up at the scheduled time.    
알람을 설정하고 디바이스를 알람시간에 깨울 수 있습니다.

http://tizen.org/privilege/application.launch    
Allows the application to be opened conditionally or to open another application.    
앱을 상황에 맞게 열거나 다른 앱을 런칭할 수 있습니다.

http://tizen.org/privilege/appmanager.kill    
Allows the application to close another application.
다른 앱을 닫을 수 있습니다.

http://tizen.org/privilege/appmanager.launch    
Allows the application to manage another application opening conditionally.    
다른 앱을 조건에 맞게 열 수 있습니다.

http://tizen.org/privilege/appmanager.setting    
Allows the application to read and update default application preferences.    
디폴트 앱의 설정을 읽고 수정할 수 있습니다.

http://tizen.org/privilege/appsetting    
Allows the application to manage application settings.
앱의 설정을 관리할 수 있습니다.    

http://tizen.org/privilege/appusage    
Allows the application to receive notifications about foreground application changes.    
foreground에 있는 앱의 변화를 받을 수 있습니다.

http://tizen.org/privilege/appwidgetprovider.install    
Allows the application to add Dynamic Box to the home screen.    
다이나믹박스를 홈스크린에 추가할 수 있습니다.

http://tizen.org/privilege/audiomanager.route    
Allows the application to set audio input and output routes and receive notifications about route events.    
오디오 입출력 경로를 설정하고 경로이벤트에 대한 알림을 받을 수 있습니다.

http://tizen.org/privilege/audiorecorder    
Allows the application to manage audio recording.    
오디오레코딩을 관리할 수 있습니다.

http://tizen.org/privilege/bluetooth.admin    
Allows the application to change Bluetooth settings, such as turning Bluetooth on or off, and setting the local device name.    
블루투스 설정을 변경할 수 있습니다. - 블루투스 on / off, 로컬 디바이스 이름 변경

http://tizen.org/privilege/bluetooth.gap    
Allows the application to use the Generic Access Profile (GAP), for example, to scan for and pair devices.    
Generic Access Profile(GAP)을 사용할 수 있습니다. - 페어 디바이스를 스캔하기 등

http://tizen.org/privilege/bluetooth.health    
Allows the application to use the Health Device Profile (HDP), for example, to send health data.    
Health Device Profile을 사용할 수 있습니다. - 헬스 데이타 보내기 등

http://tizen.org/privilege/bluetooth.opp    
Allows the application to use the Object Push Profile (OPP), for example, to send files.
Object Push Profile을 사용할 수 있습니다. - 파일 보내기 등

http://tizen.org/privilege/bluetooth.spp    
Allows the application to use the Serial Port Profile (SPP), for example, to send serial data.    
Serial Port Profile을 사용할 수 있습니다. - 시리얼 데이타 보내기 등

http://tizen.org/privilege/bluetoothmanager    
Allows the application to change Bluetooth system settings related to privacy and security, such as the visible mode.    
블루투스 시스템 설정(프라이버시, 시큐리티)을 변경할 수 있습니다. - visible 모드 등

http://tizen.org/privilege/bookmark.read    
Allows the application to read bookmarks.    
북마크를 읽을 수 있습니다.

http://tizen.org/privilege/bookmark.write    
Allows the application to create, update, and delete bookmarks.    
북마크를 생성, 수정, 삭제할 수 있습니다.

http://tizen.org/privilege/calendar.read    
Allows the application to read schedule and task information.    
스케쥴과 업무 정보를 읽을 수 있습니다.

http://tizen.org/privilege/calendar.write
Allows the application to create, update, and delete schedule and task information.    
스캐쥴과 업무 정보를 생성, 수정, 삭제할 수 있습니다.

http://tizen.org/privilege/callforward
Allows the application to control the call forwarding service.    
콜 포워딩 서비스를 컨트롤할 수 있습니다.

http://tizen.org/privilege/camera
Allows the application to manage device cameras to preview and capture pictures.
프리뷰를 보고 사진을 찍을 수 있습니다.

http://tizen.org/privilege/cellbroadcast
Allows the application to manage the Cell Broadcast Service (CBS).    
Cell Broadcast Service를 관리할 수 있습니다.

http://tizen.org/privilege/certificate.read
Allows the application to read certificates.    
인증서를 읽을 수 있습니다.

http://tizen.org/privilege/certificate.write
Allows the application to add, update, and delete certificates.    
인증서를 추가, 수정, 삭제할 수 있습니다.

http://tizen.org/privilege/contact.read
Allows the application to read contacts.
연락처 정보를 읽을 수 있습니다.

http://tizen.org/privilege/contact.write
Allows the application to add, update, and delete contacts.    
연락처 정보를 추가, 수정, 삭제할 수 있습니다.

http://tizen.org/privilege/content.read
Allows the application to read content.    
컨텐츠를 읽을 수 있습니다.

http://tizen.org/privilege/content.write
Allows the application to create, update, and delete content.    
컨텐츠를 추가, 수정, 삭제할 수 있습니다.

http://tizen.org/privilege/customnetaccount
Allows the application to use the Internet with a specified bearer.
특정 배러와 함께 인터넷을 사용할 수 있습니다.

http://tizen.org/privilege/datacontrol.consumer
Allows the application to access specific data exported by other applications.
다른 앱이 준 데이타에 접근할 수 있습니다.

http://tizen.org/privilege/dns
Allows the application to provide the Domain Name Service (DNS).    
Domain Name Service를 제공할 수 있습니다.

http://tizen.org/privilege/download
Allows the application to manage HTTP downloads.    
HTTP 다운로드를 관리할 수 있습니다.

http://tizen.org/privilege/geolocationpermission.read
Allows the application to read geolocation permissions.    
지리정보 권한을 읽을 수 있습니다.

http://tizen.org/privilege/geolocationpermission.write
Allows the application to delete geolocation permissions.    
지리정보 권한을 지울 수 있습니다.

http://tizen.org/privilege/http
Allows the application to communicate with the HTTP server.    
HTTP 서버와 통신할 수 있습니다.

http://tizen.org/privilege/ime
Allows the application to provide a way to input characters and symbols into an associated input field.    
소프트웨어 키보드를 제공할 수 있습니다.

http://tizen.org/privilege/imemanager
Allows the application to manage the installed input methods.    
설치된 소프트웨어 키보드를 관리할 수 있습니다.


http://tizen.org/privilege/inputmanager
Allows the application to generate touch and key events, and capture screens.    
터치, 키 이벤트를 만들고 스크린을 캡쳐할 수 있습니다.


http://tizen.org/privilege/location
Allows the application to use the user location data.  
유저의 지리데이터를 이용할 수 있습니다.  

http://tizen.org/privilege/lockmanager
Allows the application to unlock the device.    
디바이스를 언락할 수 있습니다.

http://tizen.org/privilege/messaging.read
Allows the application to receive messages, and to retrieve messages from the message boxes.    
메시지를 받고 메시지박스에서 메시지를 긁어올 수 있습니다.

http://tizen.org/privilege/messaging.write
Allows the application to write SMS, MMS, and email messages.    
SMS, MMS와 이메일을 쓸 수 있습니다.

http://tizen.org/privilege/netstatisticsmanager
Allows the application to reset network statistics.    
네트워크 정보를 리셋할 수 있습니다.

http://tizen.org/privilege/network.account
Allows the application to manage network accounts.    
네트워크 계정을 관리할 수 있습니다.

http://tizen.org/privilege/network.connection
Allows the application to manage network connections.    
네트워크 커넥션을 관리할 수 있습니다.

http://tizen.org/privilege/network.statistics
Allows the application to read network statistics.    
네트워크 정보를 읽을 수 있습니다.

http://tizen.org/privilege/networkmanager
Allows the application to update system network accounts.
시스템 네트워크 계정을 수정할 수 있습니다.

http://tizen.org/privilege/nfc.admin
Allows the application to change NFC settings, such as turning NFC on or off.    
NFC 설정을 변경할 수 있습니다. - NFC on / off

http://tizen.org/privilege/nfc.common
Allows the application to use NFC common features.    
NFC 공통 기능을 사용할 수 있습니다.

http://tizen.org/privilege/nfc.p2p
Allows the application to push NFC messages to other devices.    
다른 기기에 NFC 메시지를 푸쉬할 수 있습니다.

http://tizen.org/privilege/nfc.tag
Allows the application to read and write NFC tag information.    
NFC 태그정보를 읽고 쓸 수 있습니다.

http://tizen.org/privilege/nfcmanager
Allows the application to change NFC system settings, such as turning on or off reserved push, which sends predefined NDEF messages.    
NFC 시스템 설정을 변경할 수 있습니다. - 예약 푸쉬를 on / off 하기

http://tizen.org/privilege/notification
Allows the application to provide user notifications, such as messages and badges.    
유저 알림을 제공할 수 있습니다. - 메시지나 배지

http://tizen.org/privilege/package.info
Allows the application to receive package information.    
패키지 정보를 받을 수 있습니다.

http://tizen.org/privilege/packagemanager.info
Allows the application to receive detailed package information.    
자세한 패키지 정보를 받을 수 있습니다.

http://tizen.org/privilege/packagemanager.install
Allows the application to install or uninstall application packages.    
앱 패키지를 설치 혹은 삭제할 수 있습니다.

http://tizen.org/privilege/packagemanager.setting
Allows the application to set package configurations.    
패키지 설정값을 변경할 수 있습니다.

http://tizen.org/privilege/power
Allows the application to hold and control power states.    
파워 상태를 유지하거나 조절할 수 있습니다.

http://tizen.org/privilege/privacymanager.read
Allows the application to read privacy settings.    
프라이버시 설정값을 읽을 수 있습니다.

http://tizen.org/privilege/privacymanager.write
Allows the application to change privacy settings.   
프라이버시 설정을 변경할 수 있습니다.  

http://tizen.org/privilege/privilegemanager.read
Allows the application to read privilege information.    
프라이버스 정보를 읽을 수 있습니다.

http://tizen.org/privilege/push
Allows the application to receive push notifications.    
푸쉬 알림을 받을 수 있습니다.

http://tizen.org/privilege/secureelement
Allows the application to access to secure smart card chip such as UICC/SIM, embedded secure element, or secure SD card.    
UICC/SIM 카드에 접근할 수 있습니다.

http://tizen.org/privilege/setting
Allows the application to update or read user settings.    
유저 설정을 읽거나 수정할 수 있습니다.

http://tizen.org/privilege/settingmanager.read
Allows the application to read security or privacy settings.    
시큐리티나 프라이버시 설정을 읽을 수 있습니다.

http://tizen.org/privilege/settingmanager.write
Allows the application to change security or privacy settings.    
시큐리티나 프라이버시 설정을 변경할 수 있습니다.

http://tizen.org/privilege/shortcut.install
Allows the application to add and remove shortcuts from the home screen.    
홈스크린에서 숏컷을 추가 혹은 삭제할 수 있습니다.

http://tizen.org/privilege/smstrigger
Allows the application to receive SMS messages from a specified port.
특정 포트로부터 SMS 메시지를 받을 수 있습니다.

http://tizen.org/privilege/socket
Allows the application to communicate with other devices and servers.
다른 디바이스나 서버와 통신할 수 있습니다.

http://tizen.org/privilege/system
Allows the application to access system information.
시스템 정보에 접근할 수 있습니다.

http://tizen.org/privilege/systemmanager
Allows the application to access secure system information.
보안 시스템 정보에 접근할 수 있습니다.

http://tizen.org/privilege/telephony
Allows the application to retrieve telephony information, such as network, SIM, and call details.
텔레포니 정보를 긁어올 수 있습니다. - Network, SIM, Call 상제정보

http://tizen.org/privilege/telephonymanager
Allows the application to configure the mobile networks.
모바일 네트워크를 설정할 수 있습니다.


http://tizen.org/privilege/uimanager
Allows the application to manage UI properties.    
UI 속성을 관리할 수 있습니다.

http://tizen.org/privilege/userprofile.read
Allows the application to read the user profile.
유저 프로파일을 읽을 수 있습니다.

http://tizen.org/privilege/userprofile.write
Allows the application to manage the user profile.
유저 프로파일을 관리할 수 있습니다.

http://tizen.org/privilege/vibrator
Allows the application to turn on and use vibrate.
진동키능을 켜겨나 사용할 수 있습니다.

http://tizen.org/privilege/videorecorder
Allows the application to manage video recording with the camera.
카메라를 사용하여 비디오 녹화를 할 수 있습니다.

http://tizen.org/privilege/wappush
Allows the application to manage WAP push messages.
WAP 푸쉬 메시지를 관리할 수 있습니다.

http://tizen.org/privilege/web.privacy
Allows the application to manage the user data stored by the Web control or browser.
웹컨트롤이나 브라우저에서 저장된 유저데이터를 관리할 수 있습니다.

http://tizen.org/privilege/web.service
Allows the application to display Web content or use the Web content-related API.
웹컨텐트를 표시하고 웹컨텐트 관련 함수를 사용할 수 있습니다.

http://tizen.org/privilege/wifi.admin
Allows the application to manage Wi-Fi on the device, such as turning Wi-Fi on or off, and connecting to AP.
Wi-Fi를 관리할 수 있습니다. - 와이파이를 on / off 하고, AP에 접속하기

http://tizen.org/privilege/wifi.read
Allows the application to request Wi-Fi information.
Wi-Fi 정보를 요청할 수 있습니다.

http://tizen.org/privilege/wifi.wifidirect.admin
Allows the application to manage Wi-Fi Direct on the device.
Wi-Fi Direct 기능을 관리할 수 있습니다.

http://tizen.org/privilege/wifi.wifidirect.read
Allows the application to request Wi-Fi Direct information.
Wi-Fi Direct 정보를 요청할 수 있습니다.

http://tizen.org/privilege/wifimanager
Allows the application to manage the Wi-Fi system settings, such as updating AP information.
Wi-Fi 시스템 설정을 관리할 수 있습니다. - AP 정보 갱신 등


위에서 기술된 Privilege를 앱에서 사용하는 것이지요.

플랫폼 버전마다 사용할 수 있는 Privilege는 다를 수 있습니다.


SDK에서 개발할 때는,

- Project Explorer에서 자신의 프로젝트 내에 있는 tizen-manifest.xml 선택

- Tizen Manifest Editor에서 Privileges 탭 선택

- Add 버튼을 눌러 Privilege를 추가할 수 있습니다.



SDK 외부에서 개발할 경우에는,

각 앱의 xml파일에 직접 Privilege를 기술해야 합니다.


<?xml version="1.0" encoding="utf-8" ?>
<manifest xmlns="http://tizen.org/ns/packages" package="org.tizen.data-provider-slave" version="1.0.0" install-location="auto" support-mode="screen-reader">
    <!-- ... 생략 ... -->
    <ui-application appid="org.tizen.data-provider-slave" exec="/usr/apps/org.tizen.data-provider-slave/bin/data-provider-slave" nodisplay="true" multiple="true" type="capp" taskmanage="false">
    <!-- ... 생략 ... -->
    </ui-application>
    <privileges>
        <privilege>http://tizen.org/privilege/location</privilege>
        <privilege>http://developer.samsung.com/tizen/privilege/privacymanager.read</privilege> <!-- weather -->
    </privileges>
    <!-- ... 생략 ... -->
</manifest>


위의 코드는 git://review.tizen.org/apps/livebox/data-provider-slave의 tizen_2.3 브랜치,

org.tizen.data-provider-slave.xml 파일에서 따왔습니다.

SDK 외부에서 개발하는 앱은 위처럼 자신에게 필요한 Privilege를 xml 파일에 직접 추가해야 하지요.


Security/Tizen 2.X smack-privilege-config


앱에 추가된 Privilege는,

앱이 설치되는 시점에 Privilege 레벨에서 Smack 레벨로 변경됩니다.


git://review.tizen.org/framework/security/smack-privilege-config의 tizen_2.3 브랜치,

permissions_mobile/permissions_2_3_0 디렉토리에는 수많은 *.smack 파일이 있습니다.

그 중 EFL_org.tizen.privilege.camera.smack 파일을 열어보겠습니다.


~APP~ device::camera rw----
~APP~ mm_qcamera_daemon -w----
~APP~ privilege::tizen::camera rw----
~APP~ system::vconf_multimedia rw----


카메라를 사용하기 위해 필요한 스맥룰이 명시되어 있습니다.

~APP~은 위의 privilege를 설정한 앱의 스맥레이블로 치환될 것입니다.

간단히 내용을 살펴보면,

device::camera에 접근하기 위한 읽고 쓰는 권한,

mm_qcamera_daemon에 쓰기 권한,

privilege::tizen::camera를 읽고 쓰는 권한,

system::vconf_multimedia를 읽고 쓰는 권한 등의 스맥권한을 부여합니다.


이렇게 부여된 스맥레이블은,

네이티브 API가 사용하는 파일/디렉토리 등에 접근할 수 있게 할겁니다.

만약 제대로된 스맥레이블 없이 파일/디렉토리에 접근하려하면 Permission denied 에러가 나오겠죠.


git://review.tizen.org/framework/security/privilege-checker의 tizen_2.3 브랜치,

capi/src/privilege_checker.c 소스를 살펴보면,

앱이 Privilege를 가지고 있는지 여부를 직접 체크하는 부분도 있습니다.


int privilege_checker_check_package_privilege(const char* package_id, const char* privilege_name)
{
    // ... 생략 ...
    //find privilege in cache
    for(i=0; i<g_cached_privileges_size; i++)
    {
        if(hash_value == g_cached_privileges[i].hash_value)
        {
            matched_index = i;
            ++matched_cnt;
        }
    }

    if(matched_cnt == 1){
        LOGD("Found cached hash privilege");
        return PRIV_CHECKER_ERR_NONE;

    }
    // ... 생략 ...
    LOGD("Not Found cached privilege");

    // ... 생략 ...
    res = pkgmgrinfo_pkginfo_foreach_privilege(handle, __privilege_checker_privilege_list_by_pkgid_cb, user_data);
    // ... 생략 ...

    TryReturn(g_isMached == true, PRIV_CHECKER_ERR_INVALID_PRIVILEGE, "[PRIV_CHECKER_ERR_INVALID_PRIVILEGE] %s privilege denied", privilege_name);

    return PRIV_CHECKER_ERR_NONE;
}

그래서 API를 수행할 때, API를 호출한 앱의 권한을 체크하여 수행여부를 결정하게 됩니다.

예를 들어,

git://review.tizen.org/framework/api/application의 tizen_2.3 브랜치,

app_control/app_control.c 소스를 보면 Call Operaion로 런칭요청이 온 경우 Privilege가 있는지 체크합니다.


int app_control_send_launch_request(app_control_h app_control, app_control_reply_cb callback, void *user_data)
{
    // ... 생략 ...
    // Check the privilege for call operation
    if (!strcmp(operation, APP_CONTROL_OPERATION_CALL))
    {
    // ... 생략 ...

        ret = privilege_checker_check_package_privilege(pkg_id, "http://tizen.org/privilege/call");
        pkgmgrinfo_appinfo_destroy_appinfo(app_info);
        if (ret != PRIV_CHECKER_ERR_NONE)
        {
            if (ret == PRIV_CHECKER_ERR_INVALID_PRIVILEGE)
            {
                return app_control_error(APP_CONTROL_ERROR_PERMISSION_DENIED, __FUNCTION__, "no privilege for Call operation");
            }
        }
    }
}


Privilege는 Smack으로 치환되어 관리될 수 있고,

Privilege 자체로 관리될 수도 있습니다.


끝_


* SMACK에 대한 이야기를 쌓아본다

http://storycompiler.tistory.com/51


* References

https://wiki.tizen.org/wiki/Security/Tizen_2.X_smack-privilege-config

https://wiki.tizen.org/wiki/Security/Tizen_2.X_cert-svc#Additional_certificate_service_APIs


출처 : http://storycompiler.tistory.com/53

저작자 표시
신고

'Programming > Tizen' 카테고리의 다른 글

[Tizen] 타이젠 Privilege 설정  (0) 2017.02.15


Posted by injunech
2016.11.14 16:25


Java 문자열 숫자 자료형 변환


1. 숫자를 문자열로 바꾸기

int i = 1234;

String s = String.valueOf(i);     문자열 "1234"로 변환

String s = Integer.toString(i);   문자열 "1234"로 변환

String s = ””+i;                문자열 "1234"로 변환

String s = “”+12.34;            문자열 "12.34"로 변환

String s = “”+0;                문자열 "0"로 변환


 

2. 문자열을 숫자로 바꾸기

String str = "1234";

int i = Integer.valueOf(str).intValue();

int i = Integer.parseInt(str);

long i = Long.parseLong(str)

double i = Double.valueOf(str).doubleValue();

Byte.parseByte(str)        바이트형 정수로 변환 

Short.parseShort(str)      short형 정수로 변환 

Integer.parseInteger(str)  int형 정수로 변환 

Long.parseLong(str)        long형 정수로 변환 

Float.parseFloat(str)      float형 부동 소수로 변환 

Double.parseDouble(str)    double형 부동 소수로


3. 진수 변환

문자 16진수 → 숫자 10진수

String strHexValue = "A";

System.out.println(Integer.parseInt(strHexValue, 16));

>> 10


숫자 10진수 → 문자 16진수

System.out.println(Integer.toString(intHexValue, 16));

>> a 


4. 대소문자 변환


소문자 → 대문자

String strSmallA = "a";

String strLargeA = strSmallA.toUpperCase();


대문자 → 소문자 

String strLargeA = "A";

String strSmallA = strLargeA.toLowerCase();


5. 문자 비교

"a".equals("A") → false

"a".equalsIgnoreCase("A") → ture


 


 

신고


Posted by injunech
2016.10.23 23:16



Button의 눌림 효과

기존 버튼은 백그라운드로 이미지를 넣게되면 눌림효과가 사라진다.

그래서 백그라운드를 넣어서 버튼을  꾸미게되면 그에따라 눌렸을 경우의 이미지를 준비해야한다.

 

버튼의 눌렸을 경우의 이벤트 xml

button_event.xml

<?xml version="1.0" encoding="utf-8"?>

<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:state_pressed="true"

        android:drawable="@drawable/눌렸을 경우 이미지"/>

    <item android:drawable="@drawable/기본 이미지"/>

</selector>

 

버튼을 사용하는 xml

        <Button

            android:id="@+id/time_back"

            android:layout_width="fill_parent"

            android:layout_height="fill_parent"

            android:background="@layout/button_event"

            android:text="취소" />

 

이 처럼 간단하게 사용한다. 하지만 이미지뷰를 사용할경우는 조금 할 일이 많다.

버튼의 직사각형을 벋어나 다양한 모양으로 이미지를 사용할경우에 이미지뷰를 이용해서 버튼을 만든다. (버튼 처럼 만든다.)

이미지 버튼이 있지만 이미지버튼은 버튼 안에 이미지가 들어가는 형태로 거의 사용하지 않는다.

 





ImageView의 눌림 효과

이미지를 버튼으로 이용하였을 경우의 소스이다.

이미지의 변화가 시각적으로 나타나야되기 때문에 클릭리스너를 사용하지 낳고 터치리스너를 사용한다.

 

OnTouchListener 사용 부분

  private OnTouchListener mTouchEvent = new OnTouchListener() {

public boolean onTouch(View v, MotionEvent event) {

ImageView image = (ImageView) v;

switch (v.getId()) {

case R.id.image_player:

if (event.getAction() == MotionEvent.ACTION_DOWN) {

image.setColorFilter(0xaa111111, Mode.SRC_OVER);

} else if (event.getAction() == MotionEvent.ACTION_UP) {

image.setColorFilter(0x00000000, Mode.SRC_OVER);

}

break;

}

}

}

이미지가 눌렸을 때 이미지에 색을 넣어서 마치 눌린것과 같은 효과를 준다.

 

* 이미지를 눌러서 이벤트를 주려면 xml에서 android:clickable="true"을 넣어 주어야 한다.

 

신고


Posted by injunech
2016.10.03 12:02


Menifest 상에 설정하는 User-permission


 

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>

//위치정보 확인함
<uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION"/>

//위치정보 확인함

<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>

//wifi 연결을 확인함
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>

//wifi 체인지를 확인함

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

//네트웍이 연결된것을 확인할수 있게함

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />

//부팅완료를 확인할수있게함

<uses-permission android:name="android.permission.INTERNET"/>

// 인터넷을 사용함

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

// 외장메모리 사용

<uses-permission android:name="android.permission.RECODER_AUDIO"/>

//녹음이 가능하게 함

 

ACCESS_CHECKIN_PROPERTIES      체크인데이터베이스의_속성테이블로_액세스
ACCESS_COARSE_LOCATION         코스_로케이션_액세스_(Cell-ID/WiFi)
ACCESS_FINE_LOCATION           파인로케이션_액세스(GPS)          
ACCESS_LOCATION_EXTRA_COMMANDS 로케이션_옵션_커맨드_액세스       
ACCESS_MOCK_LOCATION           목_로케이션_프로바이더_생성_(테스트용)
ACCESS_NETWORK_STATE           네트워크_상태_접근                
ACCESS_SURFACE_FLINGER         서피스_플링거_접근                
ACCESS_WIFI_STATE              WiFi상태_접근                     
ADD_SYSTEM_SERVICE             시스템서비스_추가                 
BATTERY_STATS                  배터리_상태                       
BLUETOOTH                      블루투스                          
BLUETOOTH_ADMIN                블루투스_어드민                   
BRICK                          디바이스_실효성_지정              
BROADCAST_PACKAGE_REMOVED      제거된_패키지에_대한_notification_브로드캐스트
BROADCAST_SMS                  SMS에_대한_브로드캐스트           
BROADCAST_STICKY               인텐트_브로드캐스트               
CALL_PHONE                     통화                              
CALL_PRIVILEGED                통화(긴급전화_포함)               
CAMERA                         카메라                            
CHANGE_COMPONENT_ENABLED_STATE 컴포넌트의_실효성_변경            
CHANGE_CONFIGURATION           컨피그_변경                       
CHANGE_NETWORK_STATE           통신상태_변경                     
CHANGE_WIFI_STATE              WiFi상태_변경                     
CLEAR_APP_CACHE                어플리케이션_캐시_클리어          
CLEAR_APP_USER_DATA            어플리케이션의_유저데이터_클리어  
CONTROL_LOCATION_UPDATES       위치정보_갱신                     
DELETE_CACHE_FILES             캐시파일_제거                     
DELETE_PACKAGES                패키지_제거                       
DEVICE_POWER                   전원상태에_대한_로우레벨_접근     
DIAGNOSTIC                     진단리소스_읽고쓰기               
DISABLE_KEYGUARD               키_가드_끄기_DUMP_덤?            
EXPAND_STATUS_BAR              상태표시줄_확장                   
FACTORY_TEST                   팩토리_테스트                     
FLASHLIGHT                     플래시라이트                      
FORCE_BACK                     포스백                            
GET_ACCOUNTS                   어카운트_획득                     
GET_PACKAGE_SIZE               패키지_획득                       
GET_TASKS                      태스크_획득                       
HARDWARE_TEST                  하드웨어테스트                    
INJECT_EVENTS                  유저이벤트_키/트랙볼              
INSTALL_PACKAGES               패키지_인스톨                     
INTERNAL_SYSTEM_WINDOW         내부_시스템윈도_활용              
INTERNET                       인터넷                            
MANAGE_APP_TOKENS              어플리케이션_토큰관리             
MASTER_CLEAR                   마스터_클리어                     
MODIFY_AUDIO_SETTINGS          오디오설정_편집                   
MODIFY_PHONE_STATE             전화상태_편집                     
MOUNT_UNMOUNT_FILESYSTEMS      파일시스템_편집                   
PERSISTENT_ACTIVITY            액티비티_지속                     
PROCESS_OUTGOING_CALLS         전화_발신처리_접근                
READ_CALENDAR                  캘린더_읽어오기                   
READ_CONTACTS                  주소록_읽어오기                   
READ_FRAME_BUFFER              프레임버퍼_읽어오기               
READ_INPUT_STATE               입력상태_읽어오기                 
READ_LOGS                      로그_읽어오기                     
READ_OWNER_DATA                owner_data읽어오기                
READ_PHONE_STATE               통화상태_읽어오기_READ_SMS_SMS읽어오기
READ_SYNC_SETTINGS             동기설정_읽어오기                 
READ_SYNC_STATS                동기상태_읽어오기                 
REBOOT                         reboot                            
RECEIVE_BOOT_COMPLETED         boot완료                          
RECEIVE_MMS                    MMS수신                           
RECEIVE_SMS                    SMS수신                           
RECEIVE_WAP_PUSH               WAP수신                           
RECORD_AUDIO                   오디오_수신                       
REORDER_TASKS                  태스크_Z오더                      
RESTART_PACKAGES               패키지_리스타트                   
SEND_SMS                       SMS송신                           
SET_ACTIVITY_WATCHER           액티비티_왓쳐지정                 
SET_ALWAYS_FINISH              액티비티_전체_종료                
SET_ANIMATION_SCALE            스케일_애니메이션_지정            
SET_DEBUG_APP                  디버그어플리케이션_지정           
SET_ORIENTATION                스크린_로테이션지정               
SET_PREFERRED_APPLICATIONS     자주_사용하는_어플리케이션_지정   
SET_PROCESS_FOREGROUND         포어그라운드_처리지정             
SET_PROCESS_LIMIT              제한처리_지정                     
SET_TIME_ZONE                  타임존_지정                       
SET_WALLPAPER                  배경화면_지정                     
SET_WALLPAPER_HINTS            배경화면_힌트_지정                
SIGNAL_PERSISTENT_PROCESSES    지속처리_시그널_지정              
STATUS_BAR                     상태표시줄_지정                   
SUBSCRIBED_FEEDS_READ          서브스트립드_피즈_읽어오기        
SUBSCRIBED_FEEDS_WRITE         서브스트립드_피즈_쓰기            
SYSTEM_ALERT_WINDOW            알림_윈도우                       
VIBRATE                        진동                              
WAKE_LOCK                      알람                              
WRITE_APN_SETTINGS             APN설정_쓰기                      
WRITE_CALENDAR                 캘린더_쓰기                       
WRITE_CONTACTS                 주소록_쓰기                       
WRITE_GSERVICES                G서비스_쓰기                      
WRITE_OWNER_DATA               owner_data쓰기                    
WRITE_SETTINGS                 설정_쓰기
WRITE_SMS                      SMS쓰기 
WRITE_SYNC_SETTINGS            동기설정_쓰기

신고


Posted by injunech
2016.10.01 21:13


[Android] 알람 링톤 (Alarm Ringtone) 선택하기



알람의 벨소리(링톤) 을 선택하고 싶을 때 참고하세요.


DialogPicker를 startActivityForResult()로 호출 하고

해당 Dialog 에서 선택된 Ringtone 의 Uri 를 onActivityResult() 콜백 함수에서 받아온다.


onActivityResult() 콜백 함수 내에서 999 호출 되었을때 

선택된 Ringtone 의 URI 를 저장하거나 해당 링톤을 재생하거나 원하는 대로 코딩하면 됩니다.


private void showRingtonePickerDialog() {
    Intent intent = new Intent(RingtoneManager.ACTION_RINGTONE_PICKER);
    intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TITLE, "Select ringtone for notifications:");
    intent.putExtra(RingtoneManager.EXTRA_RINGTONE_SHOW_SILENT, false);
    intent.putExtra(RingtoneManager.EXTRA_RINGTONE_SHOW_DEFAULT, true);
    intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TYPE,RingtoneManager.TYPE_NOTIFICATION);
    startActivityForResult(intent, 777);
}



@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (resultCode == RESULT_OK) {
        switch (requestCode) {
           case 999:
                    Uri uri = data.getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI);
                    if (uri != null) {
                        String ringtonePath = uri.toString();
                        Toast.makeText(getApplicationContext(), "ringtone="+ringtonePath, Toast.LENGTH_LONG).show();
                    }
           break;
 
        default:
           break;
        }
    }
}



# intent 에서 아래의 옵션을 설정 하여 보여주고싶은 Alarm Ringtone 의 목록 설정


Intent intent = new Intent(RingtoneManager.ACTION_RINGTONE_PICKER);
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TITLE, "Select ringtone");
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_SHOW_SILENT, false);
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_SHOW_DEFAULT, true);

// 아래 4가지중 선택
// intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TYPE, RingtoneManager.TYPE_ALL);
// intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TYPE, RingtoneManager.TYPE_ALARM);
// intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TYPE, RingtoneManager.TYPE_NOTIFICATION);
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TYPE,  RingtoneManager.TYPE_RINGTONE);





신고


Posted by injunech
2016.09.23 01:26


ListView를 보시면 화면을 터치한 후 드래그하는 속도에 따라 ListView의 스크롤링 속도가 변하는 것을 볼 수 있습니다. 천천히 하면 스크롤도 천천히 되고 빠르게 드래그하면 바퀴 돌 듯이 ListView가 스크롤 되지요. 이런 효과는 어떻게 구현될 수 있을까요? 안드로이드에서 제공하는 클래스를 통해 쉽게 구현할 수 있습니다. 다음의 코드를 보시죠.


public class MyOnTouchListener implements OnTouchListener {

    private VelocityTracker mVelocityTracker;

    public boolean onTouch(View v, MotionEvent event) {

        if (mVelocityTracker == null) {

            mVelocityTracker = VelocityTracker.obtain();

        }

        mVelocityTracker.addMovement(event);


        switch (event.getAction()) { 

        case MotionEvent.ACTION_DOWN:

            Log.v(TAG"ACTION_DOWN");

            break



        case MotionEvent.ACTION_MOVE:

            Log.v(TAG"ACTION_MOVE");

            mVelocityTracker.computeCurrentVelocity(1);

            float velocity = mVelocityTracker.getXVelocity();

            break


        case MotionEvent.ACTION_UP:

            Log.v(TAG"ACTION_UP");

            if (mVelocityTracker != null) {

                mVelocityTracker.recycle();

                mVelocityTracker = null;

            }

            break

        } 

        return true;

    }

}


요점은 VelocityTracker가 드래그의 속도를 측정해준다는 것입니다. 위의 예제에서는 VelocityTracker의 5가지 메소드가 사용되었습니다.

1. obtain()
   이것은 정적 메소드입니다. VelocityTracker의 인스턴스를 구하기 위한 팩토리 메소드입니다.
2. addMovement(MotionEvent e)
   속도를 측정하기 위해서 VelocityTracker 인스턴스에 MotionEvent를 입력합니다.
3. computeCurrentVelocity(int unit)
   입력된 데이타를 기반으로 속도를 측정합니다. unit은 측정 시간 단위이며 1은 1밀리초를, 1000은 1초를 의미합니다. 다시 말해 unit이 1이라면 1밀리초동안의 픽셀단위의 이동 거리를 측정합니다.
4. getXVelocity()
   X축으로의 속도를 구합니다. Y축으로의 속도는 getYVelocity()를 사용하면 됩니다. 
5. recycle()
   객체를 재사용할 수 있도록 초기화 합니다.
   드래깅 속도 측정은 빈번하게 일어나는 연산입니다. 하지만 이를 위해서 각각의 OnTouchListener가 VelocityTracker의 인스턴스를 하나씩 점유하는 것은 분명 낭비입니다.(안드로이드는 임베디드 시스템을 위한 운영체제임!) 따라서 VelocityTracker 객체의 생성은 팩토리 메소드에 위임하고 객체는 사용 후 반환합니다. 그러면 결과적으로 VelocityTracker 객체 하나가 모든 드래깅 동작에 공유되어 사용될 수 있습니다. 




출처 : http://anddev.tistory.com/16


신고


Posted by injunech
2016.09.14 01:20



# String to Int



 int numInt = Integer.parseInt(numStr);


 


# Int to String



 String numStr2 = String.valueOf(numInt);
 

신고


Posted by injunech
2016.04.09 00:14


입력값이 12345 와같은 값으로 들어올때 int 배열의 하나의 공간에 각 한자리 숫자 값을 입력 받는 방법이다.
#include <stdio.h>

int main() {
	char str[50];
	int val[10];

	scanf("%s", &str);
	for (int i = 0; str[i] != '\0'; i++){
		val[i] = str[i] - '0';
		printf("%d ", val[i]);
	}
	return 0;
}
input 값이 12345 인 경우 char str 배열에 들어가는 입력 값은 str[0] 부터 str[4] 까지 차례로 1,2,3,4,5 가 되며 코드 수행시 아래와 같이 출력 된다. 1 2 3 4 5 끝.
신고


Posted by injunech
2016.03.25 00:56


android TextView setTextSize 할 때, default 설정은 sp 이며
px로 입력하려면 아래와 같이 설정한다.

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <dimen name="typo14">9sp</dimen>
</resources>


setTextSize(TypedValue.COMPLEX_UNIT_SP, 9);
setTextSize(TypedValue.COMPLEX_UNIT_PX, getResources().getDimensionPixelSize(R.dimen.typo14));
textview_msg.setTextSize(TypedValue.COMPLEX_UNIT_SP, 20);

출처:

http://stackoverflow.com/questions/6784353/inconsistency-when-setting-textview-font-size-in-code-and-in-resources

신고


Posted by injunech

티스토리 툴바