-1

ユーザーがそのアクセス許可のアクセスを受け入れることができる場所に許可プロンプトを表示したいのと同じように、ユーザーの連絡先にアクセスしたいので、例とソースコードを許可および拒否する2つのオプションでプロンプトを表示したい.

4

2 に答える 2

0

アクセス許可のリクエストに関する公式ドキュメントについては、https://developer.android.com/training/permissions/requesting.htmlをご覧ください。そのドキュメントを使用したサンプル クラスを次に示します。

public class PermissionCheck {


    private void requestIfNeeded() {
        // Here, thisActivity is the current activity
        if (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,
                        new String[]{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.
            }
        }
    }

    @Override
    public void 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.
                    handleSuccessfulPermissionsRequest();

                } else {

                    // permission denied, boo! Disable the
                    // functionality that depends on this permission.
                    handlePermissionDenied();
                }
                return;
            }

            // other 'case' lines to check for other
            // permissions this app might request
        }
    }

    private void handleSuccessfulPermissionsRequest() {
            Toast.makeText(this, "Request Successful!",Toast.LENGTH_SHORT).show();
    }

    private void handlePermissionDenied() {
        Toast.makeText(this, "Request Denied!",Toast.LENGTH_SHORT).show();
    }

}
于 2016-03-19T05:59:28.593 に答える
0

このようにする

private void PerrmissionWork() {

    List<String> permissionsNeeded = new ArrayList<String>();

    final List<String> permissionsList = new ArrayList<String>();
    if (!addPermission(permissionsList,
            Manifest.permission.ACCESS_FINE_LOCATION))
        permissionsNeeded.add("GPS");
    if (!addPermission(permissionsList,
            Manifest.permission.ACCESS_COARSE_LOCATION))
        permissionsNeeded.add("GPS COARSE");


    if (permissionsList.size() > 0) {
        if (permissionsNeeded.size() > 0) {
            // Need Rationale
            String message = "You need to grant access to "
                    + permissionsNeeded.get(0);
            for (int i = 1; i < permissionsNeeded.size(); i++)
                message = message + ", " + permissionsNeeded.get(i);
            showMessageOKCancel(message,
                    new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog,
                                int which) {
                            requestPermissions(permissionsList
                                    .toArray(new String[permissionsList
                                            .size()]),
                                    REQUEST_CODE_ASK_MULTIPLE_PERMISSIONS);
                        }
                    });
            return;
        }
        requestPermissions(
                permissionsList.toArray(new String[permissionsList.size()]),
                REQUEST_CODE_ASK_MULTIPLE_PERMISSIONS);
        return;
    }
    splashMainWork();
}

// mapWork();

private boolean addPermission(List<String> permissionsList,
        String permission) {
    if (checkSelfPermission(permission) != PackageManager.PERMISSION_GRANTED) {
        permissionsList.add(permission);
        // Check for Rationale Option
        if (!shouldShowRequestPermissionRationale(permission))
            return false;
    }
    return true;
}

private void showMessageOKCancel(String message,
        android.content.DialogInterface.OnClickListener onClickListener) {
    new AlertDialog.Builder(context).setMessage(message)
            .setPositiveButton("OK", onClickListener).setCancelable(false)
            .setNegativeButton("Cancel", null).create().show();

}

@Override
public void onRequestPermissionsResult(int requestCode,
        String[] permissions, int[] grantResults) {
    switch (requestCode) {
    case REQUEST_CODE_ASK_MULTIPLE_PERMISSIONS: {
        Map<String, Integer> perms = new HashMap<String, Integer>();
        // Initial
        perms.put(Manifest.permission.ACCESS_FINE_LOCATION,
                PackageManager.PERMISSION_GRANTED);
        perms.put(Manifest.permission.ACCESS_COARSE_LOCATION,
                PackageManager.PERMISSION_GRANTED);

        // Fill with results
        for (int i = 0; i < permissions.length; i++)
            perms.put(permissions[i], grantResults[i]);
        // Check for ACCESS_FINE_LOCATION
        if (perms.get(Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED
                && perms.get(Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED
                ) {
            // All Permissions Granted
            splashMainWork();
        } else {
            // Permission Denied
            Toast.makeText(context, "Some Permission is Denied",
                    Toast.LENGTH_SHORT).show();
        }
    }
        break;
    default:
        super.onRequestPermissionsResult(requestCode, permissions,
                grantResults);
    }
}

そして、このように作成時にこのメソッドを呼び出します..

    if (Build.VERSION.SDK_INT >= 23) {
        PerrmissionWork();
    } else {
       splashMainWork();
    }

私はスプラッシュワークメソッドで場所を取得しており、場所の許可を使用して連絡先の許可を使用でき、スプラッシュワークの代わりに連絡先コードを実行できます..そして、Googleを試すこともできるデモがたくさんあり、彼らはあなたに良い説明を与えることができます..そしてそこにあります開発者の座り方についても非常に良い説明があります。
ここ..このブログを試してみてください

于 2016-03-19T05:57:12.017 に答える