我正在更新我们的应用程序以使用新的M权限系统.除了onRequestPermissionsResult()之外,它都在工作.我需要在按下按钮时检查权限,如果成功,则发送短信.当我授予这样做的权限时,对话框会关闭,但在我再次按下按钮之前它不会触发发送文本.
我已经在onRequestPermissionsResult()方法中调试并设置了断点,但它从未进入过它.
首先调用此方法:
private void askForPermission() {
String[] permissions = new String[]{Manifest.permission.SEND_SMS};
ActivityCompat.requestPermissions(getActivity(), permissions, PERMISSIONS_CODE);
}
Run Code Online (Sandbox Code Playgroud)
然后我的回调看起来像这样:
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == PERMISSIONS_CODE) {
for (int i = 0; i < permissions.length; i++) {
String permission = permissions[i];
int grantResult = grantResults[i];
if (permission.equals(Manifest.permission.SEND_SMS)) {
if (grantResult == PackageManager.PERMISSION_GRANTED) {
onPPSButtonPress();
} else {
requestPermissions(new String[]{Manifest.permission.SEND_SMS}, PERMISSIONS_CODE);
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
有没有人遇到过类似的问题?感谢任何帮助.谢谢
我知道Android 6.0有新的权限,我知道我可以用这样的东西来调用它们
if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) !=
PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this,
new String[] {
Manifest.permission.WRITE_EXTERNAL_STORAGE
}, PERMISSION_WRITE_STORAGE);
}
Run Code Online (Sandbox Code Playgroud)
今天我看到了一个需要3个权限的Google应用:联系人,短信和相机.它正在制作第1-3页并同时将它们全部调用以激活.
任何人都可以告诉我如何调用4个权限同时激活短信,相机,联系人和存储?
示例(忘记了谷歌应用程序的名称:()
该应用程序需要短信,联系人和相机
应用程序问我(并进行了对话框1-3)激活短信,激活联系人,然后是相机.所以这个谷歌应用程序一起调用所有3个必需的权限,我的问题是我怎么能得到相同的?
java permissions android android-permissions android-6.0-marshmallow
我有一个引起冲突的奇怪问题.我不得不切换到原Fragments
生来修复它,但有一些错误.
我原来的问题:我有一个导航抽屉设置v4 Fragments.
要在我的一个片段中请求许可我打电话ActivityCompat.requestPermissions(getActivity(), Manifest.permission.ACCESS_FINE_LOCATION, 1);
提示显示正常,但是当我接受或拒绝许可时,没有任何反应.onRequestPermissionsResult()
永远不会调用回调.相反,它会在我的片段附加到的Activity中调用.对我来说没用,我需要回调才能在Fragment中工作.
考虑到这一点,我被告知我需要使用FragmentCompat
,但这只能使用native Fragments (v13+)
,所以我改变了导航抽屉,使用原生Fragments而不是v4支持库Fragments.但是,因为我正在使用AppCompatActivity,所以某些东西不起作用,比如addToBackStack()
回到之前的片段.
长话短说,有谁知道我怎么可以使用v4.Fragment
并仍然要求获得许可Fragment
并获得回调Fragment
?我觉得这是Android中的一个错误,但尚未解决,但我不是100%.
让我知道如果你需要查看我的代码,它只是运行时权限所需的标准方法,我想使用v4 Fragments,虽然这不符合我的理解.
我正在尝试实现 Marshmallow 的权限支持,但我在“onRequestPermissionsResult”中的代码从未被调用。
在 Activity 中工作时,它的工作正常但在片段中我遇到了问题,即控件没有进入 onRequestPermissionsResult()
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
mCheckPermission();
}
Run Code Online (Sandbox Code Playgroud)
在 mCheckPermission() 中:-
public void mCheckPermission() {
if (ContextCompat.checkSelfPermission(getActivity(), Manifest.permission.ACCESS_FINE_LOCATION)
!= PackageManager.PERMISSION_GRANTED || ContextCompat.checkSelfPermission(getActivity(),
Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
requestPermissions(new String[]{Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION},
PERMISSION_REQUEST_COARSE_LOCATION );
}
}
Run Code Online (Sandbox Code Playgroud)
对话框弹出 2 个按钮。拒绝和允许。单击按钮时,控件未进入 onRequestPermissionCheck();
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
switch (requestCode){
case PERMISSION_REQUEST_COARSE_LOCATION: {
if (grantResults.length > 0
&& grantResults[0] == PackageManager.PERMISSION_GRANTED) {
Toast.makeText(getActivity(), "permission granted", Toast.LENGTH_LONG).show();
//call your action
} …
Run Code Online (Sandbox Code Playgroud) android android-fragments android-runtime runtime-permissions
我有调用操作的代码,我需要最好的方式来声明运行时权限我尝试了很多代码,但我总是得到错误
这是我的基本代码任何建议,使其与运行时权限一起工作,提前感谢
public class MainActivity extends Activity {
private Button button;
private EditText etPhoneno;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button = (Button) findViewById(R.id.buttonCall);
etPhoneno = (EditText) findViewById(R.id.editText1);
// add button listener
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
String phnum = etPhoneno.getText().toString();
Intent callIntent = new Intent(Intent.ACTION_CALL);
callIntent.setData(Uri.parse("tel:" + phnum));
startActivity(callIntent);
}
});
}
Run Code Online (Sandbox Code Playgroud)
}