权限对话框未打开

时间:2019-04-26 10:17:00

标签: android bluetooth android-permissions

我正在尝试从SD卡读取文件。由于我有一个android pie,因此我需要授予运行时访问外部存储的权限。 问题是我没有收到询问用户应用程序请求访问文件等的提示。日志记录器显示拒绝访问本地硬盘驱动器的权限。

这是我的主要活动文件。

package com.example.vsgan.app1;

import android.Manifest;
import android.bluetooth.BluetoothDevice;
import android.bluetooth.BluetoothSocket;
import android.bluetooth.BluetoothAdapter;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.os.Build;
import android.support.annotation.NonNull;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.lang.reflect.Method;
import java.util.Set;
import java.util.UUID;

public class MainActivity extends AppCompatActivity {

View v;
EditText inputText;
TextView outputeText,status;
Button convertBtn,connectBtn,readrqt;
Button bluetoothbtn,readbtn;
String address=null;
OutputStream mmOutputStream;
InputStream mmInputStream;
BluetoothSocket mmSocket;
BluetoothAdapter mBluetoothAdapter;
BluetoothDevice mmDevice;
private static final int PERMISSION_REQUEST_CODE = 100;

char text;
public static final String TAG = "MainActivity";

private ConnectedThread mConnectedThread;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    int REQUEST_ENABLE_BT = 10;
   bluetoothbtn=(Button) findViewById(R.id.ble);
    readbtn=(Button)findViewById(R.id.btn_read);
    readrqt=(Button)findViewById(R.id.readrqt);
    status = (TextView) findViewById(R.id.textView2);
    readrqt.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if(checkPermission()){
                Toast.makeText(MainActivity.this,"Permission already granted",Toast.LENGTH_SHORT).show();
            }
            else
            {
                requestStoragePermission();
            }

        }
    });
readbtn.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {


          outputeText.setText(FileHelper.ReadFile(MainActivity.this));


    }
});

    bluetoothbtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            try {
                findBT();
                openBT();
            } catch (IOException e) {
                Log.d(TAG,"excaption caught");
            }
        }
    });

    inputText = (EditText) findViewById(R.id.editText);
    outputeText = (TextView) findViewById(R.id.textView);
    convertBtn = (Button) findViewById(R.id.btn);

    convertBtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            int length = inputText.getText().toString().length();
            if (length > 0) {
                for (int i = 0; i < length; i++) {
                    char text = inputText.getText().toString().charAt(i);
                    //brailletotext abc = new brailletotext(length, text);
                    //int convertedtext = abc.convert(length, text);
                    //outputeText.setText(convertedtext);
                    beginListenForData(text);
                }
            }
        }
    });

}
private boolean checkPermission() {
    int result = ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.READ_EXTERNAL_STORAGE);
    if (result == PackageManager.PERMISSION_GRANTED) {
        return true;
    } else {
        return false;
    }
}
private void requestStoragePermission() {
    if (ActivityCompat.shouldShowRequestPermissionRationale(MainActivity.this, android.Manifest.permission.READ_EXTERNAL_STORAGE)) {
        Toast.makeText(MainActivity.this, "Write External Storage permission allows us to read files. Please allow this permission in App Settings.", Toast.LENGTH_LONG).show();
    } else {
        ActivityCompat.requestPermissions(MainActivity.this, new String[]{android.Manifest.permission.READ_EXTERNAL_STORAGE},PERMISSION_REQUEST_CODE);
    }
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String permissions[], @NonNull int[] grantResults) {
    switch (requestCode) {
        case PERMISSION_REQUEST_CODE:
            if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
            Log.e("value", "Permission Granted, Now you can use local drive .");
        } else {
            Log.e("value", "Permission Denied, You cannot use local drive .");
        }
        break;


    }
}

private void openBT() throws IOException {
    Log.d(TAG,"openBT");
    //UUID uuid = UUID.fromString("00001115-0000-1000-8000-00805F9B34FB");
    UUID uuid = UUID.fromString(String.valueOf(mmDevice.getUuids()[0].getUuid()));
    mmSocket = mmDevice.createRfcommSocketToServiceRecord(uuid);
    mmSocket.connect();
    mConnectedThread = new ConnectedThread(mmSocket);
    mConnectedThread.start();
    mmOutputStream = mmSocket.getOutputStream();
    mmInputStream = mmSocket.getInputStream();

    Log.d(TAG,"Bluetooth Opened");
    //Toast.makeText(getApplicationContext(),"Bluetooth Opened",Toast.LENGTH_SHORT).show();
    status.setText("Bluetooth Opened");
}

private void beginListenForData(char convertedtext) {
    mConnectedThread.write(convertedtext);
    Log.d(TAG,"done");
}

private void findBT() {
    mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
    if (mBluetoothAdapter==null) {
        Toast.makeText(getApplicationContext(),"No bluetooth adapter is available",Toast.LENGTH_SHORT).show();
        Log.d(TAG,"No bluetooth adapter is available");
    }
    if (!mBluetoothAdapter.isEnabled()) {
        Intent enableBluetooth = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
        startActivityForResult(enableBluetooth,0);
    }

    Set<BluetoothDevice> pairedDevices = mBluetoothAdapter.getBondedDevices();
    if (pairedDevices.size()>0) {
        for (BluetoothDevice device : pairedDevices) {
            if (device.getName().equals("HC-05")) {
                mmDevice = device;
                break;
            }
        }
    }
    Log.d(TAG,"Bluetooth device found");
    //Toast.makeText(getApplicationContext(),"Bluetooth device found",Toast.LENGTH_LONG).show();
    status.setText("Bluetooth device found");
    UUID muuid = mmDevice.getUuids()[0].getUuid();
    status.setText(String.valueOf(muuid));
    Log.d(TAG,mmDevice.getName());
}

private class ConnectedThread extends Thread {
    private final InputStream mmInStream;
    private final OutputStream mmOutStream;

    //creation of the connect thread
    public ConnectedThread(BluetoothSocket socket) {
        InputStream tmpIn = null;
        OutputStream tmpOut = null;

        try {
            //Create I/O streams for connection
            tmpIn = socket.getInputStream();
            tmpOut = socket.getOutputStream();
        } catch (IOException e) { }

        mmInStream = tmpIn;
        mmOutStream = tmpOut;
    }

    //write method
    public void write(char input) {
       //byte[] msgBuffer =input;         //converts entered String into bytes
        try {
            mmOutStream.write(input);                //write bytes over BT connection via outstream
        } catch (IOException e) {
            //if you cannot write, close the application
            Toast.makeText(getBaseContext(), "Connection Failure", Toast.LENGTH_LONG).show();
            finish();

        }
    }

}

}

这是我的androidmanifest.xml文件

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

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.vsgan.app1">
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<user-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:roundIcon="@mipmap/ic_launcher_round"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">
    <activity android:name=".MainActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>

这是logcat错误

04-26 15:36:36.008 9723-9723/com.example.vsgan.app1 E/value: Permission Denied, You cannot use local drive .

请帮帮我!!! 预先感谢

2 个答案:

答案 0 :(得分:0)

请在中添加更多权限 运行时:Manifest.permission.WRITE_EXTERNAL_STORAGE

和清单文件

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

添加Rutime权限:

  

实现'gun0912.ted:tedpermission:2.1.0'

在活动课堂中

TedPermission.with(getActivity())
                .setPermissionListener(permissionlistener)
                .setDeniedMessage("If you reject permission,you can not use this service\n\nPlease turn on permissions at [Setting] > [Permission]")
                .setPermissions(Manifest.permission.ACCESS_FINE_LOCATION,
                        Manifest.permission.READ_EXTERNAL_STORAGE,
                        Manifest.permission.WRITE_EXTERNAL_STORAGE)
                .check();
  

-

PermissionListener permissionlistener = new PermissionListener() {
        @Override
        public void onPermissionGranted() {

        }

        @Override
        public void onPermissionDenied(ArrayList<String> deniedPermissions) {
        }
    };

答案 1 :(得分:0)

您还必须使用WRITE_EXTERNAL_STORAGE权限

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

if (ContextCompat.checkSelfPermission(context, Manifest.permission.WRITE_EXTERNAL_STORAGE)
                        != PackageManager.PERMISSION_GRANTED) {

                    Toast.makeText(context, " Allow the Storage Permission", Toast.LENGTH_LONG).show();
                    ActivityCompat.requestPermissions((Activity) context,
                            new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
                            MY_PERMISSIONS_CONSTANT);
                    return false;
}