我已经开始研究Android M运行时权限了.在这里,我面临的问题是,如果requestPermissions
从Dialog Fragment
类中调用,则onRequestPermissionsResult
不会在同一个Dialog fragment
类中调用.但是如果requestPermissions
从Activity
类或Fragment
类onRequestPermissionsResult
调用,则在同一个类中调用方法.
这是我的示例代码:
public class ContactPickerDialog extends DialogFragment {
private static final int READ_CONTACTS_REQUEST_CODE = 12;
private Context mContext;
private void loadContact() {
if(hasPermission(mContext, Manifest.permission.READ_CONTACTS)){
new ContactSyncTask().execute();
} else {
this.requestPermissions(new String[]{Manifest.permission.READ_CONTACTS}, READ_CONTACTS_REQUEST_CODE);
}
}
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
Logger.d("TAG", "dialog onRequestPermissionsResult");
switch (requestCode) {
case READ_CONTACTS_REQUEST_CODE:
// Check Permissions Granted or not
if (grantResults[0] == …
Run Code Online (Sandbox Code Playgroud) android android-fragments android-dialogfragment android-6.0-marshmallow
我想从Google提供的官方设计库中试用新的Snackbar.它的使用非常接近Toast所以我认为它很容易尝试.
我已经在运行5.1的模拟器以及运行5.0的三星Galaxy S6 Edge上尝试过.
我的问题是应用程序在应该显示Snackbar时崩溃.
码
package com.jayway.andreas.test;
import android.app.Activity;
import android.os.Bundle;
import android.support.design.widget.Snackbar;
import android.view.View;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Snackbar.make(v, R.string.test, Snackbar.LENGTH_LONG)
.setAction("Action!", new View.OnClickListener() {
@Override
public void onClick(View v) {
// NOP
}
})
.show();
}
});
}
}
Run Code Online (Sandbox Code Playgroud)
布局:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
android:id="@+id/root_layout"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity">
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content" …
Run Code Online (Sandbox Code Playgroud) Intent intent = new Intent("android.location.GPS_ENABLED_CHANGE");
intent.putExtra("enabled", true);
getBaseContext().sendBroadcast(intent);`
Run Code Online (Sandbox Code Playgroud)
我使用此代码启用GPS,但它给我这样的错误.
java.lang.SecurityException: Permission Denial: not allowed to send broadcast android.location.GPS_ENABLED_CHANGE from pid=1208, uid=10051
Run Code Online (Sandbox Code Playgroud)
所以任何人都给我解决方案.
嘿,我是 android 新手,我需要pdf
使用 Intent
. 我正在使用此代码来设置 MIME 类型。
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("pdf/*")
Run Code Online (Sandbox Code Playgroud)
但它没有按我想要的方式工作,请向我提供任何建议,或者我可以对现有代码进行一些更改。
这是我的代码示例.
public class DialogPermission extends DialogFragment {
@Nullable
@Override
public View getView() {
View root = LayoutInflater.from(getActivity()).inflate(R.layout.frg_dialog_permission, null, false);
Button btnRead = (Button) root.findViewById(R.id.btn_read_contact_permission);
btnRead.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (ContextCompat.checkSelfPermission(getActivity(), Manifest.permission.READ_CONTACTS) != PackageManager.PERMISSION_GRANTED){
if (ActivityCompat.shouldShowRequestPermissionRationale(getActivity(),Manifest.permission.READ_CONTACTS)){
}else{
ActivityCompat.requestPermissions(getActivity(),new String[]{Manifest.permission.READ_CONTACTS},101);}
}
}
});
return root;
}
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
Log.e("DialogPermission","Ho! Ho! Ho!"); // Log not printed
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
}
}
Run Code Online (Sandbox Code Playgroud)
我不希望在Activity中回调.我希望一切都清楚地解释.