Cosc 54730 Permissions Permissions Note that all of

  • Slides: 23
Download presentation
Cosc 5/4730 Permissions

Cosc 5/4730 Permissions

Permissions Note that all of start with android. permission. • Location: – • About

Permissions Note that all of start with android. permission. • Location: – • About “cell” Network – • BLUETOOTH, BLUETOOTH_ADMIN, Accounts: (Account. Manager) – • BIND_INPUT_METHOD (Input. Method. Service), BIND_REMOTEVIEWS (Remote. Views. Service), BIND_TEXT_SERVICE (Text. Service like spellcheckerservice), BIND_VPN_SERVICE (Vpn. Service), BIND_WALLPAPER (Wallpaper. Service) Bluetooth – • BATTERY_STATS, CALL_PHONE, CAMERA, MODIFY_AUDIO_SETTINGS, NFC, READ_EXTERNAL_STORAGE, WRITE_EXTERNAL_STORAGE, RECEIVE_BOOT_OCMPLETED, RECORD_AUDIO, VIBRATE, WAKE_LOCK (prevent screen from dimming and lock), Varying services – • ACCESS_NETWORK_STATE, ACCESS_WIFI_STATE, CHANGE_NETWORK_STATE, CHANGE_WIFI_MULITCAST_STATE, CHANGE_WIFI_STATE, INTERNET (needed to use networking) Hardware: – • ACCESS_COARSE_LOCATION, ACCESS_FINE_LOCATION, ACCESS_LOCATION_EXTRA_COMMANDS, ACCESS_MOCK_LOCATION GET_ACCOUNTS, MANAGE_ACCOUNTS, USER_CREDENTIALS Text messaging – READ_SMS, RECEIVE_MMS, SEND_SMS, WRITE_SMS

Permissions (2) • User “information”: – READ_CALENDAR, WRITE_CALENDAR, READ_CONTACTS, WRITE_CONTACTS, READ_USER_DICTIONARY, WRTIE_USER_DICTIONARY – READ_HISTORY_BOOKMARKS,

Permissions (2) • User “information”: – READ_CALENDAR, WRITE_CALENDAR, READ_CONTACTS, WRITE_CONTACTS, READ_USER_DICTIONARY, WRTIE_USER_DICTIONARY – READ_HISTORY_BOOKMARKS, WRITE_HISTORY_BOOKMARKS, – READ_SOCIAL_STREAM, SUBSCRIBE_FEEDS_READ, SUBSCRIBE_FEEDS_WRITE, WRITE_SOCAIL_STREAM, – READ_SYNC_SETTINGS, READ_SYNC_STATS, WRITE_SYNC_SETTINGS, – SET_ALARM, USE_SIP, WRITE_SETTINGS (system settings), RECEIVE_WAP_PUSH, SET_TIME_ZONE – SET_WALLPAPER, SET_WALLPAPER_HINTS – READ_PROFILE and WRITE_PROFILE (user’s personal profile data) • Phone calls: – READ_PHONE_STATE, READ_CALL_LOG, WRITE_CALL_LOG, PROCESS_OUTGOING_CALLS • Mostly depreciated as of API 30 (android 11) for Call. Screening. Service. • Running applications (and recent apps too). – GET_TASKS, REORDER_TASKS

Other Misc Permissions • ADD_VOICEMAIL – Added in API level 14, app must have

Other Misc Permissions • ADD_VOICEMAIL – Added in API level 14, app must have access to a voicemail server. – Constant Value: "com. android. voicemail. permission. ADD_VOICEMAIL" • DISABLE_KEYGUARD, EXPAND_STATUS_BAR • FLASHLIGHT, GET_PACKAGE_SIZE • KILL_BACKGROUND_PROCESSES – Added in API level 8 – Allows an application to call kill. Background. Processes(String)

Other permissions. • I skipped over all the “system” permissions. – Says, “Not for

Other permissions. • I skipped over all the “system” permissions. – Says, “Not for use by third-party applications. ” in the documentation. • Your app must be a system level app, which you can’t do without rooting your phone or becoming a vendor, like say Motorola or Samsung. – http: //stackoverflow. com/questions/14256687/how-to-make-myapplication-system

Calendar Example • Once a calendar is connected to the device • You can

Calendar Example • Once a calendar is connected to the device • You can use the following example from google to read/write to the calendar – Uses the Calendar Provider • http: //developer. android. com/guide/topics/providers/calenda r-provider. html

Contacts Example • Same with contacts • http: //developer. android. com/guide/topics/providers/contacts -provider. html

Contacts Example • Same with contacts • http: //developer. android. com/guide/topics/providers/contacts -provider. html

User Dictionary • Android use the user dictionary for the example in the “content

User Dictionary • Android use the user dictionary for the example in the “content provider basics” example. • http: //developer. android. com/guide/topics/providers/content -provider-basics. html

Account. Manager • Provides a centralized registry of the user online accounts – Example:

Account. Manager • Provides a centralized registry of the user online accounts – Example: Facebook, dropbox, Evernote, etc… – There are some examples of how to use and create your “account” for your online service. • http: //www. finalconcept. com. au/article/view/android-account-manager-step -by-step • http: //developer. android. com/reference/android/accounts/Account. Manager. html

Incoming/outgoing phone calls • deprecated as of API 29. Uses a callscreeningservice, that is

Incoming/outgoing phone calls • deprecated as of API 29. Uses a callscreeningservice, that is built into the app dialer, until api 29 which is buggy, but can be separate. • Uses: PROCESS_OUTGOING_CALLS and READ_PHONE_STATE • The example uses two Broadcast Receivers – You can do it in one, but split for the example. – Able to get the phone number and the information. – http: //androidlabs. org/short-experiments/broadcast-receivers/processoutgoing-calls/ • This example also shows you have to change the incoming phone number! – http: //code. google. com/p/krvarma-androidsamples/source/browse/trunk/Detect. Calls/? r=37

Incoming/outgoing phone calls (2) • You can block outgoing phone calls – You use:

Incoming/outgoing phone calls (2) • You can block outgoing phone calls – You use: set. Result. Data(null); – That will stop the outbound call! • http: //stackoverflow. com/questions/599443/hang-up-outgoing-call-in-android – You can not drop/ignore incoming calls thought. Requires the MODIFY_PHONE_STATE permission, which is a system level permission. • http: //stackoverflow. com/questions/15012082/rejecting-incoming-call-in-android • http: //androidsourcecode. blogspot. in/2010/10/blocking-incoming-call-android. html

Call. Screening. Service • Started in API 24 – But had to be part

Call. Screening. Service • Started in API 24 – But had to be part of the dialer. • As of API 29 (android 10), the screener could be separate. – Allows you disallow incoming calls, plus reject (hang up), no notifications, and no logging in the dialer – in API 29 added no ring option, which is a standard option. • https: //developer. android. com/reference/kotlin/android/telec om/Call. Screening. Service

android. xml file <service android: name="your. package. Your. Call. Screening. Service. Implementation" android: permission="android.

android. xml file <service android: name="your. package. Your. Call. Screening. Service. Implementation" android: permission="android. permission. BIND_SCREENING_SERVICE"> <intent-filter> <action android: name="android. telecom. Call. Screening. Service"/> </intent-filter> </service>

main activity and permissions. • You'll need to request permission to be the screener.

main activity and permissions. • You'll need to request permission to be the screener. So something like this: private static final int REQUEST_ID = 1; public void request. Role() { Role. Manager role. Manager = (Role. Manager) get. System. Service(ROLE_SERVICE); Intent intent = role. Manager. create. Request. Role. Intent(Role. Manager. ROLE_CALL_SCREENING); start. Activity. For. Result(intent, REQUEST_ID); } @Override public void on. Activity. Result(int request. Code, int result. Code, Intent data) { if (request. Code == REQUEST_ID) { if (result. Code == android. app. Activity. RESULT_OK) { // Your app is now the call screening app } else { // Your app is not the call screening app } } }

The service. public class my. Call. Screening. Service extends Call. Screening. Service { public

The service. public class my. Call. Screening. Service extends Call. Screening. Service { public my. Call. Screening. Service() {} //constructor @Override public void on. Screen. Call(@Non. Null Call. Details call. Details) { if (call. Details. get. Call. Direction() == Call. Details. DIRECTION_INCOMING) { String num = call. Details. get. Handle(). get. Scheme. Specific. Part(); String phonenumber = Phone. Number. Utils. format. Number(num, Locale. get. Default(). get. Country()); //now make a decision on how to responsetocall if (call. Details. get. Call. Direction() == Call. Details. DIRECTION_OUTGOING) { //you can't change out going calls, but you can look the numbers and stuff. } else { //it's an unknown direction?

respond. To. Call(call. Details, …); • The call. Details, must match what you sent.

respond. To. Call(call. Details, …); • The call. Details, must match what you sent. • So now the reponse: Call. Response. Builder my. Call. Reponse = new Call. Response. Builder(); my. Call. Reponse. set. Silence. Call(true/false) • don't ring. Stand alone option. API 29+, the rest are API 24+ . set. Disallow. Call(true/false) • disallow the call this one seems to need to be true for the rest below to work. . set. Reject. Call(true/false) • reject the call, with disallow, ends the call. . set. Skip. Call. Log(true/false) • With disallow, also don't log the call . set. Skip. Notification(true/false); • with disallow, also no notification of the call (which really doesn't show if reject). respond. To. Call(call. Details, my. Call. Reponse. build() );

Task lists • Running. App in the Demo shows how to get the Running

Task lists • Running. App in the Demo shows how to get the Running Applications. – It’s pretty simple. – Get the Activity. Manager from the service – You can get Running. Services, Running. App. Processes, Running. Tasks, and Recent. Tasks. • My example will list the package name for each one in the list. • Reference: http: //stackoverflow. com/questions/5446565/androidhow-do-i-check-if-activity-is-running

Reorder Tasks(2) • While facebook uses the reorder_tasks permission, I can’t find a single

Reorder Tasks(2) • While facebook uses the reorder_tasks permission, I can’t find a single example for it. • What I did find an interesting article on how all the activities (tasks) work on the back to front of the stack. – And managing how your activities are launched with the launch modes.

Wallpaper • Get the instance of the wallpaper manager. • Then use set. Bitmap,

Wallpaper • Get the instance of the wallpaper manager. • Then use set. Bitmap, set. Resource, or set. Stream methods to change the wallpaper • The example (setwallpaper) is very simple and uses a wallpaper in the resource directory.

Read/Write profile • As of Jelly. Bean (Api 14+) you can have several user

Read/Write profile • As of Jelly. Bean (Api 14+) you can have several user profiles. – And we have methods to read and write these profiles. – It’s handled through the Contracts, so you will need at least READ_CONTACTS permission as well and READ_PROFILE and WRITE_PROFILE

Read/Write profile • The profile is handled with a Content. Provider. • So to

Read/Write profile • The profile is handled with a Content. Provider. • So to get the entire profile (I think every profile) you need the following query: Cursor c = get. Content. Resolver(). query( Contacts. Contract. Profile. CONTENT_URI, null, null);

Read profile example • The read. Pofile project reads all the profiles on the

Read profile example • The read. Pofile project reads all the profiles on the device and displays the information to the screen, using the query before. • My example is heavy modified, but based on http: //androidcodelabs. appspot. com/resources/tutorials/contactsprovider/e x 1. html

Q&A

Q&A