我正试图请求 ACCESS_FINE_LOCATION
获取用户当前位置的权限。
我的日志记录表明我的应用程序在查询时当前没有此权限 ContextCompat.checkSelfPermission()
,但是打电话的时候 ActivityCompat.requestPermissions()
不显示任何内容。
我的谷歌Map代码(实现) OnMapReadyCallback
以及 ActivityCompat.OnRequestPermissionsResultCallback()
)在一个 FragmentActivity
.
我设法得到了 requestPermissions()
功能在应用程序的其他活动中成功工作,它只是一个与谷歌Map。当它被放置在 onCreate()
方法 Activity
,或 onMapReady()
(它需要去的地方)。
if(ContextCompat.checkSelfPermission(LocationActivity.this, android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
Log.d(TAG, "not granted");
final String[] permissions = new String[] {android.Manifest.permission.ACCESS_FINE_LOCATION};
if(ActivityCompat.shouldShowRequestPermissionRationale(this, android.Manifest.permission.ACCESS_FINE_LOCATION)) {
Log.d(TAG, "rationale");
// Explain to the user why permission is required, then request again
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMessage("We need permissions")
.setCancelable(false)
.setPositiveButton("OK", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
ActivityCompat.requestPermissions(LocationActivity.this, permissions, 1);
}
});
AlertDialog alert = builder.create();
alert.show();
} else {
Log.d(TAG, "request" + android.Manifest.permission.ACCESS_FINE_LOCATION);
// If permission has not been denied before, request the permission
ActivityCompat.requestPermissions(LocationActivity.this, permissions, 1);
}
} else {
Log.d(TAG, "granted");
}
有什么想法吗?这和我的活动课有关吗( FragmentActivity
),或者google map异步调用权限请求?
4条答案
按热度按时间dojqjjoe1#
在将我的类完全剥离出来之后,它仍然不起作用,我意识到这个活动是使用tabhost示例化的。
当我停止使用tabhost时,将成功显示提示。我猜新的权限提示不支持tabhosts-这是一个bug吗?
与应用程序请求相同的问题没有出现
我最终创建了一个permissionsrequestactivity,它代表我的tabhost处理权限请求和响应,然后退出(通过intent extras bundle传入请求的权限信息)。
它将请求的响应作为广播传回,由我的tabhost接收。
有点黑客,但工作正常!
vawmfj5a2#
检查您是否已经在android的manifest文件中添加了请求的权限,就像在android m之前一样,只有这样您才能获得预期的行为。
将权限添加到清单中,以便您可以通过activitycompat.requestpermissions请求权限:
amrnrhlw3#
我将分享对我有用的代码。在活动的protectedvoidoncreate(bundle savedinstancestate){}方法中,我希望看到提示,其中包含以下代码:
在protectedvoid oncreate(bundle savedinstancestate){}方法之前,我创建了以下常量和方法:
ecbunoof4#
我在一个使用tabhost的项目中也遇到过同样的问题。基于@robin解决方案,我使用eventbus库从子活动向tabactity发送消息。
事件总线:https://github.com/greenrobot/eventbus
创建事件对象:
在您的主要活动中:
为要请求的权限设置其他消息。在您的儿童活动中,您可以发布适当的信息:
注意onrequestpermissionsresult回调和请求代码;)!它只在主要活动中起作用。