Java 类android.support.v4.app.ActivityCompat.OnRequestPermissionsResultCallback 实例源码

项目:satstat    文件:PermissionHelper.java   
/**
 * Requests permissions to be granted to this application.
 * 
 * This method is a wrapper around
 * {@link android.support.v4.app.ActivityCompat#requestPermissions(android.app.Activity, String[], int)}
 * which works in a similar way, except it can be called from non-activity contexts. When called, it
 * displays a notification with a customizable title and text. When the user taps the notification, an
 * activity is launched in which the user is prompted to allow or deny the request.
 * 
 * After the user has made a choice,
 * {@link android.support.v4.app.ActivityCompat.OnRequestPermissionsResultCallback#onRequestPermissionsResult(int, String[], int[])}
 * is called, reporting whether the permissions were granted or not.
 * 
 * @param context The context from which the request was made. The context supplied must implement
 * {@link android.support.v4.app.ActivityCompat.OnRequestPermissionsResultCallback} and will receive the
 * result of the operation.
 * @param permissions The requested permissions
 * @param requestCode Application specific request code to match with a result reported to
 * {@link android.support.v4.app.ActivityCompat.OnRequestPermissionsResultCallback#onRequestPermissionsResult(int, String[], int[])}
 * @param notificationTitle The title for the notification
 * @param notificationText The text for the notification
 * @param notificationIcon Resource identifier for the notification icon
 */
public static <T extends Context & OnRequestPermissionsResultCallback> void requestPermissions(final T context, String[] permissions, int requestCode, String notificationTitle, String notificationText, int notificationIcon) {
    ResultReceiver resultReceiver = new ResultReceiver(new Handler(Looper.getMainLooper())) {
        @Override
        protected void onReceiveResult (int resultCode, Bundle resultData) {
            String[] outPermissions = resultData.getStringArray(Const.KEY_PERMISSIONS);
            int[] grantResults = resultData.getIntArray(Const.KEY_GRANT_RESULTS);
            context.onRequestPermissionsResult(resultCode, outPermissions, grantResults);
        }
    };

    Intent permIntent = new Intent(context, PermissionRequestActivity.class);
    permIntent.putExtra(Const.KEY_RESULT_RECEIVER, resultReceiver);
    permIntent.putExtra(Const.KEY_PERMISSIONS, permissions);
    permIntent.putExtra(Const.KEY_REQUEST_CODE, requestCode);

    TaskStackBuilder stackBuilder = TaskStackBuilder.create(context);
    stackBuilder.addNextIntent(permIntent);

    PendingIntent permPendingIntent =
            stackBuilder.getPendingIntent(
                    0,
                    PendingIntent.FLAG_UPDATE_CURRENT
                    );

    NotificationCompat.Builder builder = new NotificationCompat.Builder(context)
    .setSmallIcon(notificationIcon)
    .setContentTitle(notificationTitle)
    .setContentText(notificationText)
    .setOngoing(true)
    //.setCategory(Notification.CATEGORY_STATUS)
    .setAutoCancel(true)
    .setWhen(0)
    .setContentIntent(permPendingIntent)
    .setStyle(null);

    NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
    notificationManager.notify(requestCode, builder.build());
}