Managing Audio PlayBack

1.Controlling Your App’s Volume and Playback:
http://developer.android.com/intl/zh-cn/training/managing-audio/volume-playback.html

2.Managing Audio Focus :
http://developer.android.com/intl/zh-cn/training/managing-audio/audio-focus.html

Android Design Support Library

http://android-developers.blogspot.com/2015/05/android-design-support-library.html

1.SnackBar
2.TextInputLayout(floating labels for editing text)
3.Floating Action Button
4.TabLaout
5.NavigationView
6.CoordinatorLayout, motion, and scrolling(Strong FrameLayout)
7.CoordinatorLayout andr Floating action Button
8.CoordinatorLayout and AppBar-AppBarLayout
9Collaps Toolbars 可以滑动的Toolbars

.support.design.widget.AppBarLayout        android:layout_height="192dp"        android:layout_width="match_parent">    .support.design.widget.CollapsingToolbarLayout            android:layout_width="match_parent"            android:layout_height="match_parent"            app:layout_scrollFlags="scroll|exitUntilCollapsed">        .support.v7.widget.Toolbar                android:layout_height="?attr/actionBarSize"                android:layout_width="match_parent"                app:layout_collapseMode="pin"/>        .support.design.widget.CollapsingToolbarLayout>.support.design.widget.AppBarLayout>

build配置:

 compile 'com.android.support:design:22.2.0'

关于Material Design里面的Tabs设计,请再参考
http://www.google.com/design/spec/components/tabs.html

以及官方Training课程里面的
http://developer.android.com/training/implementing-navigation/lateral.html

Best Practices for Background Jobs
http://developer.android.com/intl/zh-cn/training/best-background.html

运行在后台:Running in a Background Service
http://developer.android.com/intl/zh-cn/training/run-background-service/index.html

1.AsyncTask

AsyncTask is designed to be a helper class around Thread and Handler and does not constitute a generic threading framework. AsyncTasks should ideally be used for short operations (a few seconds at the most.) If you need to keep threads running for long periods of time, it is highly recommended you use the various APIs provided by the java.util.concurrent package such as Executor, ThreadPoolExecutor and FutureTask.An asynchronous task is defined by a computation that runs on a background thread and whose result is published on the UI thread. An asynchronous task is defined by 3 generic types, called Params, Progress and Result, and 4 steps, called onPreExecute, doInBackground, onProgressUpdate andonPostExecute.注释说的非常详细,AsyncTasks只适合处理周期短的任务,当需要长时间运行的话需要使用concurrent包下面的多线程,线程池和FutureTask

AsyncTask must be subclassed to be used. The subclass will override at least one method (doInBackground(Params…)), and most often will override a second one (onPostExecute(Result).)
Here is an example of subclassing:

举个列子:

private class DownloadFilesTask extends AsyncTask<URL,Integer,Long>{     protectedLong doInBackground(URL... urls){         int count = urls.length;         long totalSize =0;         for(int i =0; i < count; i++){             totalSize +=Downloader.downloadFile(urls[i]);             publishProgress((int)((i /(float) count)*100));             // Escape early if cancel() is called             if(isCancelled())break;         }         return totalSize;     }     protectedvoid onProgressUpdate(Integer... progress){         setProgressPercent(progress[0]);     }     protectedvoid onPostExecute(Long result){         showDialog("Downloaded "+ result +" bytes");     } }

Once created, a task is executed very simply:

 newDownloadFilesTask().execute(url1, url2, url3);

Cancelling a task:
A task can be cancelled at any time by invoking cancel(boolean). Invoking this method will cause subsequent calls to isCancelled() to return true. After invoking this method, onCancelled(Object), instead of onPostExecute(Object) will be invoked after doInBackground(Object[]) returns. To ensure that a task is cancelled as quickly as possible, you should always check the return value of isCancelled() periodically from doInBackground(Object[]), if possible (inside a loop for instance.)

HandlerThread

内部封装Handler的Thread,Loop管理Handler发送过来的消息(Task)存储Messagequeue,Loop内有while无限循环获取队列消息有就处理,没有就阻塞。

ThreadPool

Java通过Executors提供四种线程池,分别为:

  • newCachedThreadPool
    创建一个可缓存的线程池。如果线程池的大小超过了处理任务所需要的线程,那么就会回收部分空闲(60秒不执行任务)的线程,当任务数增加时,此线程池又可以智能的添加新线程来处理任务。此线程池不会对线程池大小做限制,线程池大小完全依赖于操作系统(或者说JVM)能够创建的最大线程大小。
  • newFixedThreadPool
    创建固定大小的线程池。每次提交一个任务就创建一个线程,直到线程达到线程池的最大大小。线程池的大小一旦达到最大值就会保持不变,如果某个线程因为执行异常而结束,那么线程池会补充一个新线程。
  • newScheduledThreadPool
    创建一个大小无限制的线程池。此线程池支持定时以及周期性执行任务。
  • newSingleThreadExecutor
    创建一个单线程的线程池。此线程池支持定时以及周期性执行任务。这个线程池只有一个线程在工作,也就是相当于单线程串行执行所有任务。如果这个唯一的线程因为异常结束,那么会有一个新的线程来替代它。此线程池保证所有任务的执行顺序按照任务的提交顺序执行。

服务

有两种可用于继承的类来创建service:
1. Service:
这是所有服务类的基类,继承该类,对于在服务中创建新线程很重要.因为默认服务使用应用的主线程,可能会降低程序的性能.
2. IntentService:
这是一个Service的子类,该子类使用线程处理所有启动请求,一次一个.这是不使用服务处理多任务请求的最佳选择.你需要做的只是实现
onHandleIntent()方法即可.可以为每个启动请求接收到intent,放到后台工作即可.
下面几段描述怎么用上面两个类实现服务.
继承IntentService类

因为大多数服务不必处理同时发生的多个请求.(多线程方案可能会很危险),所以最好用IntentService实现该服务.

IntentService类可以做这些事情:
从应用的主线程当中创建一个默认的线程执行所有的intents发送给onStartCommand()方法,该线程从主线程分离.
创建工作队列,每次传递一个intent 给onHandleIntent()方法实现,所以不必担心多线程.
**所有的请求被处理后服务停止,所以你永远都不必调用stopSelf()函数.
默认实现onBind()方法返回null.**
默认实现onStartCommand()方法是发送一个intent给工作队列,然后发送给onHandleIntent()方法的实现。
所有这些都基于:实现onHandleIntent()方法,来处理客户端的请求的工作。(因此,你还需要为服务提供一个小构造器).

public class WaIntentServices extends IntentService{ public WaIntentServices(String name) {  super(name); } @Override protected void onHandleIntent(Intent intent) {  //sleep 五秒  long endTime = System.currentTimeMillis() + 5*1000;  while(System.currentTimeMillis() < endTime){   synchronized(this){    try {     wait(endTime - System.currentTimeMillis());    } catch (InterruptedException e) {     e.printStackTrace();    }   }  }   }

Service的生命周期:

注意:不像实现activity的生命周期回调方法,你不需要在实现服务的这些方法时调用父类的方法。
通过实现这些接口,你可以监控服务生命周期的两个循环:
服务的整个生命周期是从调用onCreate()开始,直至onDestroy()方法返回结束.就像activity,一个服务是在onCreate()方法中初始化,在onDestroy()方法中释放资源.例如,一个music后台播放的服务,会在onCreate()方法里创建线程播放音乐,在onDestroy()方法里停止该线程.
服务的活动周期是从调用onStartCommand()或者onBind()函数开始,这两个方法是当意图传给startService()或者bindService()才会被调用。
如果服务已经启动,活动周期和整个生命周期一起结束(即使onStartCommand()函数返回后,服务仍然处于活动状态)。如果服务被绑定,在onUnbind()返回后活动周期结束.
注意:尽管调用stopSelf()或者stopService()可以停止服务,但停止时不会有回调方法被调用.(没有onStop()回调),所以,除非服务绑定客户端,系统会销毁该服务,这时,onDestroy()方法是唯一被回调的方法.
图2展示了服务的两种典型的回调方法流程。尽管一个用startService()创建服务,一个用bindService()创建,但记住,任何服务,不论如何启动,都允许客户端绑定它。所以一个用onStartCommand()(客户端方式调用startService())初始化的服务可以调用onBind()方法(客户端方式就调用bindService())。

1.使用Palette获取图片的像素点

        View imageview=view.findViewById(R.id.im);        finalTextViewv=(TextView)view.findViewById(R.id.v);        finalTextView vd=(TextView)view.findViewById(R.id.vd);        finalTextView vl=(TextView)view.findViewById(R.id.vl);        finalTextViewm=(TextView)view.findViewById(R.id.m);        finalTextView md=(TextView)view.findViewById(R.id.md);        finalTextView ml=(TextView)view.findViewById(R.id.ml);        Drawable drawable=getResources().getDrawable(R.drawable.palette);        imageview.setBackground(drawable);        BitmapDrawable bd=(BitmapDrawable)drawable;        Palette.generateAsync(bd.getBitmap(),newPalette.PaletteAsyncListener(){            publicvoidonGenerated(Palette palette){                v.setBackgroundColor(palette.getVibrantColor(Color.BLACK));                vd.setBackgroundColor(palette.getDarkVibrantColor(Color.BLACK));                vl.setBackgroundColor(palette.getLightVibrantColor(Color.BLACK));                m.setBackgroundColor(palette.getMutedColor(Color.BLACK));                md.setBackgroundColor(palette.getDarkMutedColor(Color.BLACK));                ml.setBackgroundColor(palette.getLightMutedColor(Color.BLACK));            }        });

Fragment创建

import android.os.Bundle;import android.support.v4.app.Fragment;import android.view.LayoutInflater;import android.view.ViewGroup;publicclassArticleFragmentextendsFragment{    @Override    publicView onCreateView(LayoutInflater inflater,ViewGroup container,        Bundle savedInstanceState){        // Inflate the layout for this fragment        return inflater.inflate(R.layout.article_view, container,false);    }}

Add a Fragment to an Activity using XML

"http://schemas.android.com/apk/res/android"    android:orientation="horizontal"    android:layout_width="fill_parent"    android:layout_height="fill_parent">    name="com.example.android.fragments.HeadlinesFragment"              android:id="@+id/headlines_fragment"              android:layout_weight="1"              android:layout_width="0dp"              android:layout_height="match_parent"/>    name="com.example.android.fragments.ArticleFragment"              android:id="@+id/article_fragment"              android:layout_weight="2"              android:layout_width="0dp"              android:layout_height="match_parent"/>

Example of replacing one fragment with another:

// Create fragment and give it an argument specifying the article it should showArticleFragment newFragment =newArticleFragment();Bundle args =newBundle();args.putInt(ArticleFragment.ARG_POSITION, position);newFragment.setArguments(args);FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();// Replace whatever is in the fragment_container view with this fragment,// and add the transaction to the back stack so the user can navigate backtransaction.replace(R.id.fragment_container, newFragment);transaction.addToBackStack(null);// Commit the transactiontransaction.commit();

Declaring Permissions

Every Android app runs in a limited-access sandbox. If an app needs to use resources or information outside of its own sandbox, the app has to request the appropriate permission. You declare that your app needs a permission by listing the permission in the App Manifest.
Depending on how sensitive the permission is, the system might grant the permission automatically, or the device user might have to grant the request. For example, if your app requests permission to turn on the device’s flashlight, the system grants that permission automatically. But if your app needs to read the user’s contacts, the system asks the user to approve that permission. Depending on the platform version, the user grants the permission either when they install the app (on Android 5.1 and lower) or while running the app (on Android 6.0 and higher).
Determine What Permissions Your App Needs

As you develop your app, you should note when your app is using capabilities that require a permission. Typically, an app is going to need permissions whenever it uses information or resources that the app doesn’t create, or performs actions that affect the behavior of the device or other apps. For example, if an app needs to access the internet, use the device camera, or turn Wi-Fi on or off, the app needs the appropriate permission. For a list of system permissions, see Normal and Dangerous Permissions.
Your app only needs permissions for actions that it performs directly. Your app does not need permission if it is requesting that another app perform the task or provide the information. For example, if your app needs to read the user’s address book, the app needs the READ_CONTACTS permission. But if your app uses an intent to request information from the user’s Contacts app, your app does not need any permissions, but the Contacts app does need to have that permission. For more information, see Consider Using an Intent.
Add Permissions to the Manifest

To declare that your app needs a permission, put a element in your app manifest, as a child of the top-level element. For example, an app that needs to send SMS messages would have this line in the manifest:

"http://schemas.android.com/apk/res/android"        package="com.example.snazzyapp">    "android.permission.SEND_SMS"/>    ...>        ...        

Requesting Permissions at Run Time

Beginning in Android 6.0 (API level 23), users grant permissions to apps while the app is running, not when they install the app. This approach streamlines the app install process, since the user does not need to grant permissions when they install or update the app. It also gives the user more control over the app’s functionality; for example, a user could choose to give a camera app access to the camera but not to the device location. The user can revoke the permissions at any time, by going to the app’s Settings screen.
System permissions are divided into two categories, normaland dangerous:
Normal permissions do not directly risk the user’s privacy. If your app lists a normal permission in its manifest, the system grants the permission automatically.
Dangerous permissions can give the app access to the user’s confidential data. If your app lists a normal permission in its manifest, the system grants the permission automatically. If you list a dangerous permission, the user has to explicitly give approval to your app.
Check For Permissions

If your app needs a dangerous permission, you must check whether you have that permission every time you perform an operation that requires that permission. The user is always free to revoke the permission, so even if the app used the camera yesterday, it can’t assume it still has that permission today.
To check if you have a permission, call the ContextCompat.checkSelfPermission() method. For example, this snippet shows how to check if the activity has permission to write to the calendar:

// Assume thisActivity is the current activityint permissionCheck =ContextCompat.checkSelfPermission(thisActivity,        Manifest.permission.WRITE_CALENDAR);

If the app has the permission, the method returns PackageManager.PERMISSION_GRANTED, and the app can proceed with the operation. If the app does not have the permission, the method returns PERMISSION_DENIED, and the app has to explicitly ask the user for permission.
Request Permissions

If your app needs a dangerous permission that was listed in the app manifest, it must ask the user to grant the permission. Android provides several methods you can use to request a permission. Calling these methods brings up a standard Android dialog, which you cannot customize.
Explain why the app needs permissions

// Here, thisActivity is the current activityif(ContextCompat.checkSelfPermission(thisActivity,                Manifest.permission.READ_CONTACTS)        !=PackageManager.PERMISSION_GRANTED){    // Should we show an explanation?    if(ActivityCompat.shouldShowRequestPermissionRationale(thisActivity,            Manifest.permission.READ_CONTACTS)){        // Show an expanation to the user *asynchronously* -- don't block        // this thread waiting for the user's response! After the user        // sees the explanation, try again to request the permission.    }else{        // No explanation needed, we can request the permission.        ActivityCompat.requestPermissions(thisActivity,                newString[]{Manifest.permission.READ_CONTACTS},                MY_PERMISSIONS_REQUEST_READ_CONTACTS);        // MY_PERMISSIONS_REQUEST_READ_CONTACTS is an        // app-defined int constant. The callback method gets the        // result of the request.    }}

Note: When your app calls requestPermissions(), the system shows a standard dialog box to the user. Your app cannot configure or alter that dialog box. If you need to provide any information or explanation to the user, you should do that before you call requestPermissions(), as described in Explain why the app needs permissions.
Handle the permissions request response

When your app requests permissions, the system presents a dialog box to the user. When the user responds, the system invokes your app’s onRequestPermissionsResult() method, passing it the user response. Your app has to override that method to find out whether the permission was granted. The callback is passed the same request code you passed to requestPermissions(). For example, if an app requests READ_CONTACTSaccess it might have the following callback method:
@Override
publicvoid onRequestPermissionsResult(int requestCode,
String permissions[],int[] grantResults){
switch(requestCode){
case MY_PERMISSIONS_REQUEST_READ_CONTACTS:{
// If request is cancelled, the result arrays are empty.
if(grantResults.length >0
&& grantResults[0]==PackageManager.PERMISSION_GRANTED){

            // permission was granted, yay! Do the            // contacts-related task you need to do.        }else{            // permission denied, boo! Disable the            // functionality that depends on this permission.        }        return;    }    // other 'case' lines to check for other    // permissions this app might request}

}

很多时候,我们在写Android程序都需要用到权限,因为这涉及到安全问题,下面就为大家提供了一些常用的权限。
程序执行需要读取到安全敏感项必需在androidmanifest.xml中声明相关权限请求, 完整列表如下:

  1. android.permission.ACCESS_CHECKIN_PROPERTIES
    允许读写访问”properties”表在 checkin数据库中,改值可以修改上传( Allows read/write access to the “properties” table in the checkin database, to change values that get uploaded)

  2. android.permission.ACCESS_COARSE_LOCATION
    允许一个程序访问CellID或WiFi热点来获取粗略的位置(Allows an application to access coarse (e.g., Cell-ID, WiFi) location)

  3. android.permission.ACCESS_FINE_LOCATION
    允许一个程序访问精良位置(如GPS) (Allows an application to access fine (e.g., GPS) location)

  4. android.permission.ACCESS_LOCATION_EXTRA_COMMANDS
    允许应用程序访问额外的位置提供命令(Allows an application to access extra location provider commands)

  5. android.permission.ACCESS_MOCK_LOCATION
    允许程序创建模拟位置提供用于测试(Allows an application to create mock location providers for testing)

  6. android.permission.ACCESS_NETWORK_STATE
    允许程序访问有关GSM网络信息(Allows applications to access information about networks)

  7. android.permission.ACCESS_SURFACE_FLINGER
    允许程序使用SurfaceFlinger底层特性 (Allows an application to use SurfaceFlinger’s low level features)

  8. android.permission.ACCESS_WIFI_STATE
    允许程序访问Wi-Fi网络状态信息(Allows applications to access information about Wi-Fi networks)

  9. android.permission.ADD_SYSTEM_SERVICE
    允许程序发布系统级服务(Allows an application to publish system-level services).

  10. android.permission.BATTERY_STATS
    允许程序更新手机电池统计信息(Allows an application to update the collected battery statistics)

  11. android.permission.BLUETOOTH
    允许程序连接到已配对的蓝牙设备(Allows applications to connect to paired bluetooth devices)

  12. android.permission.BLUETOOTH_ADMIN
    允许程序发现和配对蓝牙设备(Allows applications to discover and pair bluetooth devices)

  13. android.permission.BRICK
    请求能够禁用设备(非常危险)(Required to be able to disable the device (very *erous!).)

  14. android.permission.BROADCAST_PACKAGE_REMOVED
    允许程序广播一个提示消息在一个应用程序包已经移除后(Allows an application to broadcast a notification that an application package has been removed)

  15. android.permission.BROADCAST_STICKY
    允许一个程序广播常用intents(Allows an application to broadcast sticky intents)

  16. android.permission.CALL_PHONE
    允许一个程序初始化一个电话拨号不需通过拨号用户界面需 要用户确认 (Allows an application to initiate a phone call without going through the Dialer user interface for the user to confirm the call being placed.)

  17. android.permission.CALL_PRIVILEGED
    允许一个程序拨打任何号码,包含紧急号码无需通过拨号用户界面需要用户确认 (Allows an application to call any phone number, including emergency numbers, without going through the Dialer user interface for the user to confirm the call being placed)

  18. android.permission.CAMERA
    请求访问使用照相设备(Required to be able to access the camera device. )

  19. android.permission.CHANGE_COMPONENT_ENABLED_STATE
    允许一个程序是否改变一个组件或其他的启用或禁用(Allows an application to change whether an application component (other than its own) is enabled or not. )

  20. android.permission.CHANGE_CONFIGURATION
    允许一个程序修改当前设置,如本地化(Allows an application to modify the current configuration, such as locale. )

  21. android.permission.CHANGE_NETWORK_STATE
    允许程序改变网络连接状态(Allows applications to change network connectivity state)

  22. android.permission.CHANGE_WIFI_STATE
    允许程序改变Wi-Fi连接状态(Allows applications to change Wi-Fi connectivity state)

  23. android.permission.CLEAR_APP_CACHE
    允许一个程序清楚缓存从所有安装的程序在设备中(Allows an application to clear the caches of all installed applications on the device. )

  24. android.permission.CLEAR_APP_USER_DATA
    允许一个程序清除用户设置(Allows an application to clear user data)

  25. android.permission.CONTROL_LOCATION_UPDATES
    允许启用禁止位置更新提示从无线模块 (Allows enabling/disabling location update notifications from the radio. )

  26. android.permission.DELETE_CACHE_FILES
    允许程序删除缓存文件(Allows an application to delete cache files)

  27. android.permission.DELETE_PACKAGES
    允许一个程序删除包(Allows an application to delete packages)

  28. android.permission.DEVICE_POWER
    允许访问底层电源管理(Allows low-level access to power management)

  29. android.permission.DIAGNOSTIC
    允许程序RW诊断资源(Allows applications to RW to diagnostic resources. )

  30. android.permission.DISABLE_KEYGUARD
    允许程序禁用键盘锁(Allows applications to disable the keyguard )

  31. android.permission.DUMP
    允许程序返回状态抓取信息从系统服务(Allows an application to retrieve state dump information from system services.)

  32. android.permission.EXPAND_STATUS_BAR
    允许一个程序扩展收缩在状态栏,android开发网提示应该是一个类似Windows Mobile中的托盘程序(Allows an application to expand or collapse the status bar. )

  33. android.permission.FACTORY_TEST
    作为一个工厂测试程序,运行在root用户(Run as a manufacturer test application, running as the root user. )

  34. android.permission.FLASHLIGHT
    访问闪光灯,android开发网提示HTC Dream不包含闪光灯(Allows access to the flashlight )

  35. android.permission.FORCE_BACK
    允许程序强行一个后退操作是否在顶层activities(Allows an application to force a BACK operation on whatever is the top activity. )

  36. android.permission.FOTA_UPDATE
    暂时不了解这是做什么使用的,android开发网分析可能是一个预留权限.

  37. android.permission.GET_ACCOUNTS
    访问一个帐户列表在Accounts Service中(Allows access to the list of accounts in the Accounts Service)

  38. android.permission.GET_PACKAGE_SIZE
    允许一个程序获取任何package占用空间容量(Allows an application to find out the space used by any package. )

  39. android.permission.GET_TASKS
    允许一个程序获取信息有关当前或最近运行的任务, 一个缩略的任务状态,是否活动等等(Allows an application to get information about the currently or recently running tasks: a thumbnail representation of the tasks, what activities are running in it, etc.)

  40. android.permission.HARDWARE_TEST
    允许访问硬件(Allows access to hardware peripherals. )

  41. android.permission.INJECT_EVENTS
    允许一个程序截获用户事件如按键、触摸、轨迹球等等到一个时间流,android 开发网提醒算是hook技术吧(Allows an application to inject user events (keys, touch, trackball) into the event stream and deliver them to ANY window.)

  42. android.permission.INSTALL_PACKAGES
    允许一个程序安装packages(Allows an application to install packages. )

  43. android.permission.INTERNAL_SYSTEM_WINDOW
    允许打开窗口使用系统用户界面(Allows an application to open windows that are for use by parts of the system user interface. )

  44. android.permission.INTERNET
    允许程序打开网络套接字(Allows applications to open network sockets)

  45. android.permission.MANAGE_APP_TOKENS
    允许程序管理(创建、催后、 z- order默认向z轴推移)程序引用在窗口管理器中(Allows an application to manage (create, destroy, Z-order) application tokens in the window manager. )

  46. android.permission.MASTER_CLEAR
    目前还没有明确的解释,android开发网分析可能是清除一切数据,类似硬格机

  47. android.permission.MODIFY_AUDIO_SETTINGS
    允许程序修改全局音频设置(Allows an application to modify global audio settings)

  48. android.permission.MODIFY_PHONE_STATE
    允许修改话机状态,如电源,人机接口等(Allows modification of the telephony state ? power on, mmi, etc. )

  49. android.permission.MOUNT_UNMOUNT_FILESYSTEMS
    允许挂载和反挂载文件系统可移动存储 (Allows mounting and unmounting file systems for removable storage. )

  50. android.permission.PERSISTENT_ACTIVITY
    允许一个程序设置他的activities显示 (Allow an application to make its activities persistent. )

  51. android.permission.PROCESS_OUTGOING_CALLS
    允许程序监视、修改有关播出电话(Allows an application to monitor, modify, or abort outgoing calls)

  52. android.permission.READ_CALENDAR
    允许程序读取用户日历数据(Allows an application to read the user’s calendar data.)

  53. android.permission.READ_CONTACTS
    允许程序读取用户联系人数据(Allows an application to read the user’s contacts data.)

  54. android.permission.READ_FRAME_BUFFER
    允许程序屏幕波或和更多常规的访问帧缓冲数据(Allows an application to take screen shots and more generally get access to the frame buffer data)

  55. android.permission.READ_INPUT_STATE
    允许程序返回当前按键状态(Allows an application to retrieve the current state of keys and switches. )

  56. android.permission.READ_LOGS
    允许程序读取底层系统日志文件(Allows an application to read the low-level system log files. )

  57. android.permission.READ_OWNER_DATA
    允许程序读取所有者数据(Allows an application to read the owner’s data)

  58. android.permission.READ_SMS
    允许程序读取短信息(Allows an application to read SMS messages.)

  59. android.permission.READ_SYNC_SETTINGS
    允许程序读取同步设置(Allows applications to read the sync settings)

  60. android.permission.READ_SYNC_STATS
    允许程序读取同步状态(Allows applications to read the sync stats)

  61. android.permission.REBOOT
    请求能够重新启动设备(Required to be able to reboot the device. )

  62. android.permission.RECEIVE_BOOT_COMPLETED
    允许一个程序接收到 ACTION_BOOT_COMPLETED广播在系统完成启动(Allows an application to receive the ACTION_BOOT_COMPLETED that is broadcast after the system finishes booting. )

  63. android.permission.RECEIVE_MMS
    允许一个程序监控将收到MMS彩信,记录或处理(Allows an application to monitor incoming MMS messages, to record or perform processing on them. )

  64. android.permission.RECEIVE_SMS
    允许程序监控一个将收到短信息,记录或处理(Allows an application to monitor incoming SMS messages, to record or perform processing on them.)

  65. android.permission.RECEIVE_WAP_PUSH
    允许程序监控将收到WAP PUSH信息(Allows an application to monitor incoming WAP push messages. )

  66. android.permission.RECORD_AUDIO
    允许程序录制音频(Allows an application to record audio)

  67. android.permission.REORDER_TASKS
    允许程序改变Z轴排列任务(Allows an application to change the Z-order of tasks)

  68. android.permission.RESTART_PACKAGES
    允许程序重新启动其他程序(Allows an application to restart other applications)

  69. android.permission.SEND_SMS
    允许程序发送SMS短信(Allows an application to send SMS messages)

  70. android.permission.SET_ACTIVITY_WATCHER
    允许程序监控或控制activities已经启动全局系统中Allows an application to watch and control how activities are started globally in the system.

  71. android.permission.SET_ALWAYS_FINISH
    允许程序控制是否活动间接完成在处于后台时Allows an application to control whether activities are immediately finished when put in the background.

  72. android.permission.SET_ANIMATION_SCALE
    修改全局信息比例(Modify the global animation scaling factor.)

  73. android.permission.SET_DEBUG_APP
    配置一个程序用于调试(Configure an application for debugging.)

  74. android.permission.SET_ORIENTATION
    允许底层访问设置屏幕方向和实际旋转(Allows low-level access to setting the orientation(actually rotation) of the screen.)

  75. android.permission.SET_PREFERRED_APPLICATIONS
    允许一个程序修改列表参数 PackageManager.addPackageToPreferred() 和PackageManager.removePackageFromPreferred()方法(Allows an application to modify the list of preferred applications with the PackageManager.addPackageToPreferred() and PackageManager.removePackageFromPreferred() methods.)

  76. android.permission.SET_PROCESS_FOREGROUND
    允许程序当前运行程序强行到前台(Allows an application to force any currently running process to be in the foreground.)

  77. android.permission.SET_PROCESS_LIMIT
    允许设置最大的运行进程数量(Allows an application to set the maximum number of (not needed) application processes that can be running. )

  78. android.permission.SET_TIME_ZONE
    允许程序设置时间区域(Allows applications to set the system time zone)

  79. android.permission.SET_WALLPAPER
    允许程序设置壁纸(Allows applications to set the wallpaper )

  80. android.permission.SET_WALLPAPER_HINTS
    允许程序设置壁纸hits(Allows applications to set the wallpaper hints)

  81. android.permission.SIGNAL_PERSISTENT_PROCESSES
    允许程序请求发送信号到所有显示的进程中 (Allow an application to request that a signal be sent to all persistent processes)

  82. android.permission.STATUS_BAR
    允许程序打开、关闭或禁用状态栏及图标Allows an application to open, close, or disable the status bar and its icons.

  83. android.permission.SUBSCRIBED_FEEDS_READ
    允许一个程序访问订阅RSS Feed内容提供(Allows an application to allow access the subscribed feeds ContentProvider. )

  84. android.permission.SUBSCRIBED_FEEDS_WRITE
    系统暂时保留改设置,android开发网认为未来版本会加入该功能。

  85. android.permission.SYSTEM_ALERT_WINDOW
    允许一个程序打开窗口使用 TYPE_SYSTEM_ALERT,显示在其他所有程序的顶层(Allows an application to open windows using the type TYPE_SYSTEM_ALERT, shown on top of all other applications. )

  86. android.permission.VIBRATE
    允许访问振动设备(Allows access to the vibrator)

  87. android.permission.WAKE_LOCK
    允许使用PowerManager的 WakeLocks保持进程在休眠时从屏幕消失( Allows using PowerManager WakeLocks to keep processor from sleeping or screen from dimming)

  88. android.permission.WRITE_APN_SETTINGS
    允许程序写入API设置(Allows applications to write the apn settings)

  89. android.permission.WRITE_CALENDAR
    允许一个程序写入但不读取用户日历数据(Allows an application to write (but not read) the user’s calendar data. )

  90. android.permission.WRITE_CONTACTS
    允许程序写入但不读取用户联系人数据(Allows an application to write (but not read) the user’s contacts data. )

  91. android.permission.WRITE_GSERVICES
    允许程序修改Google服务地图(Allows an application to modify the Google service map. )

  92. android.permission.WRITE_OWNER_DATA
    允许一个程序写入但不读取所有者数据(Allows an application to write (but not read) the owner’s data.)

  93. android.permission.WRITE_SETTINGS
    允许程序读取或写入系统设置(Allows an application to read or write the system settings. )

  94. android.permission.WRITE_SMS
    允许程序写短信(Allows an application to write SMS messages)

  95. android.permission.WRITE_SYNC_SETTINGS
    允许程序写入同步设置(Allows applications to write the sync settings)

android平台上的权限许可分得很细,如果软件无法正常执行时看看是不是缺少相关的permission声明,最终我们还需要使用 android sign tools签名生成的apk文件。

常用Intent的调用(系统的)
显示某个坐标在地图上

Uri uri = Uri.parse(“geo:38.899533,-77.036476”);
Intent it = new Intent(Intent.Action_VIEW,uri);
startActivity(it);

//显示路径

Uri uri = Uri.parse(“ http://maps.google.com/maps?f=d&saddr=startLat%20startLng&daddr=endLat%20endLng&hl=en”);
Intent it = new Intent(Intent.ACTION_VIEW,URI);

//发送短信或彩信

Intent it = new Intent(Intent.ACTION_VIEW);
it.putExtra(“sms_body”, “The SMS text”);
it.setType(“vnd.android-dir/mms-sms”);
startActivity(it);

//发送短信

Uri uri = Uri.parse(“smsto:10086”);
Intent it = new Intent(Intent.ACTION_SENDTO, uri);
it.putExtra(“sms_body”, “cwj”);
startActivity(it);

//发送彩信

Uri uri = Uri.parse(“content://media/external/images/media/23”);
Intent it = new Intent(Intent.ACTION_SEND);
it.putExtra(“sms_body”, “some text”);
it.putExtra(Intent.EXTRA_STREAM, uri);
it.setType(“image/png”);
startActivity(it);

//发送邮件
Uri uri = Uri.parse(“mailto:Android123@163.com”);
Intent it = new Intent(Intent.ACTION_SENDTO, uri);
startActivity(it);

Intent it = new Intent(Intent.ACTION_SEND);
it.putExtra(Intent.EXTRA_EMAIL, Android123@163.com);
it.putExtra(Intent.EXTRA_TEXT, “The email body text”);
it.setType(“text/plain”);
startActivity(Intent.createChooser(it, “Choose Email Client”));

Intent it=new Intent(Intent.ACTION_SEND);
String[] tos={“me@abc.com”};
String[] ccs={“you@abc.com”};
it.putExtra(Intent.EXTRA_EMAIL, tos);
it.putExtra(Intent.EXTRA_CC, ccs);
it.putExtra(Intent.EXTRA_TEXT, “The email body text”);
it.putExtra(Intent.EXTRA_SUBJECT, “The email subject text”);
it.setType(“message/rfc822”);
startActivity(Intent.createChooser(it, “Choose Email Client”));

//播放媒体文件

Intent it = new Intent(Intent.ACTION_VIEW);
Uri uri = Uri.parse(“file:///sdcard/cwj.mp3”);
it.setDataAndType(uri, “audio/mp3”);
startActivity(it);

Uri uri = Uri.withAppendedPath(MediaStore.Audio.Media.INTERNAL_CONTENT_URI, “1”);
Intent it = new Intent(Intent.ACTION_VIEW, uri);
startActivity(it);

//卸载APK

Uri uri = Uri.fromParts(“package”, strPackageName, null);
Intent it = new Intent(Intent.ACTION_DELETE, uri);
startActivity(it);

//卸载apk 2
Uri uninstallUri = Uri.fromParts(“package”, “xxx”, null);
returnIt = new Intent(Intent.ACTION_DELETE, uninstallUri);

//安装APK
Uri installUri = Uri.fromParts(“package”, “xxx”, null);
returnIt = new Intent(Intent.ACTION_PACKAGE_ADDED, installUri);

//播放音乐

Uri playUri = Uri.parse(“file:///sdcard/download/sth.mp3”);
returnIt = new Intent(Intent.ACTION_VIEW, playUri);

//发送附近

Intent it = new Intent(Intent.ACTION_SEND);
it.putExtra(Intent.EXTRA_SUBJECT, “The email subject text”);
it.putExtra(Intent.EXTRA_STREAM, “file:///sdcard/cwj.mp3”);
sendIntent.setType(“audio/mp3”);
startActivity(Intent.createChooser(it, “Choose Email Client”));

//market上某个应用信,pkg_name就是应用的packageName

Uri uri = Uri.parse(“market://search?q=pname:pkg_name”);
Intent it = new Intent(Intent.ACTION_VIEW, uri);
startActivity(it);

//market上某个应用信息,app_id可以通过www网站看下

Uri uri = Uri.parse(“market://details?id=app_id”);
Intent it = new Intent(Intent.ACTION_VIEW, uri);
startActivity(it);

//调用搜索

Intent intent = new Intent();
intent.setAction(Intent.ACTION_WEB_SEARCH);
intent.putExtra(SearchManager.QUERY,”android123”)
startActivity(intent);

更多相关文章

  1. android Thread和Runnable的区别
  2. Android(安卓)多线程下载
  3. Android实时获得经纬度,发送给c++服务端
  4. 我今天的面试题,注册广播有几种方式,这些方式有何优缺点?请谈谈Andr
  5. 浅谈Android中的线程的通信及Handle机制
  6. Android学习记录(6)—将java中的多线程下载移植到Android中(即多线
  7. [置顶] Android学习记录(6)—将java中的多线程下载移植到Android中
  8. android中getSystemService详解
  9. android上传图片到服务器,求服务器那边和android的Activity的完整

随机推荐

  1. Android 常用的SDCARD和内存操作
  2. android > SDcard读写文件
  3. Android 读取本地txt文件和写入txt文件到
  4. Android os设备谎言分辨率的解决方案
  5. Android部分字体高亮
  6. Android SQLiteDatabase的使用
  7. Android 权限全集
  8. Android之快捷方式
  9. repo命令详解
  10. Android ProgressDialog