StartActivity 一旦用户在权限屏幕上单击允许
StartActivity once user click Allow on Permission Screen
我的 activity 需要位置许可,我写了下面的代码来获得许可。但在这种情况下,如果应用最初没有位置权限,用户需要点击两次才能打开 activity。我可以做一些更改,以便一旦用户在“权限”屏幕上单击“允许”,然后才会触发 intent。
int PERMISSION_ALL = 1;
String[] PERMISSIONS = new String[0];
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
PERMISSIONS = new String[]{
Manifest.permission.ACCESS_FINE_LOCATION};
}
if (!hasPermissions(getApplicationContext(), PERMISSIONS)) {
ActivityCompat.requestPermissions(StartupActivity.this, PERMISSIONS, PERMISSION_ALL);
}
if (hasPermissions(getApplicationContext(), PERMISSIONS)) {
new Thread(new Runnable() {
@Override
public void run() {
Intent intent = new Intent(StartActivity.this, Details.class);
startActivity(intent);
}
}).start();
}
override
onRequestPermissionsResult
如果获得许可,则从那里开始 Activity
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
if(requestCode == PERMISSION_ALL){
if(grantResults.length>0 && grantResults[0]==PackageManager.PERMISSION_GRANTED ){
new Thread(new Runnable() {
@Override
public void run() {
Intent intent = new Intent(StartActivity.this, Details.class);
startActivity(intent);
}
}).start();
}else{
Toast.makeText(MainActivity.this, "Access Denied ! Cannot proceed further ", Toast.LENGTH_SHORT).show();
}
}
}
注意:显然,代码似乎在 StartupActivity
中(来自 StartupActivity.this
),因此您不需要创建线程,只需启动您的 Details
Activity
简单 Intent
代码将是
class StartupActivity extends ..{
onCreate...(){}
// here you will have onRequestPermissionsResult
@Override
public void onRequestPermissionsResult( ....){...}
}
@Override
onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults)
{
// Handle your permission grant/reject scenarios here,
for( int x = 0; x < grantResults.length; x++ )
{
if( grantResults[x] == PackageManager.PERMISSION_GRANTED )
{
// Since you had one, start your new activity here
}
else
{
// Do something with the permissions that got BLOCKED??
}
}
}
这将由 android 内部调用,一旦用户 grants/rejects 获得许可
是的,您需要覆盖 onRequestPermissionsResult
首先在 onCreate
int PERMISSION_ALL = 1;
String[] PERMISSIONS = new String[0];
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
PERMISSIONS = new String[]{
Manifest.permission.ACCESS_FINE_LOCATION};
}
if (!hasPermissions(getApplicationContext(), PERMISSIONS)) {
ActivityCompat.requestPermissions(StartupActivity.this, PERMISSIONS, PERMISSION_ALL);
}
然后覆盖
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
if (requestCode == PERMISSION_ALL) {
Intent intent = new Intent(StartActivity.this,Details.class);
startActivity(intent);
}
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
}
当您的应用请求权限时,系统会向用户显示一个对话框。当用户响应时,系统会调用您应用的 onRequestPermissionsResult() 方法,将用户响应传递给它。您的应用程序必须重写该方法才能确定是否授予了权限。回调传递给您传递给 requestPermissions() 的相同请求代码。例如,如果应用程序请求 READ_CONTACTS 访问,它可能具有以下回调方法:
@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.
} else {
// permission denied, boo! Disable the
// functionality that depends on this permission.
}
return;
}
// other 'case' lines to check for other
// permissions this app might request
}
}
我的 activity 需要位置许可,我写了下面的代码来获得许可。但在这种情况下,如果应用最初没有位置权限,用户需要点击两次才能打开 activity。我可以做一些更改,以便一旦用户在“权限”屏幕上单击“允许”,然后才会触发 intent。
int PERMISSION_ALL = 1;
String[] PERMISSIONS = new String[0];
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
PERMISSIONS = new String[]{
Manifest.permission.ACCESS_FINE_LOCATION};
}
if (!hasPermissions(getApplicationContext(), PERMISSIONS)) {
ActivityCompat.requestPermissions(StartupActivity.this, PERMISSIONS, PERMISSION_ALL);
}
if (hasPermissions(getApplicationContext(), PERMISSIONS)) {
new Thread(new Runnable() {
@Override
public void run() {
Intent intent = new Intent(StartActivity.this, Details.class);
startActivity(intent);
}
}).start();
}
override
onRequestPermissionsResult
如果获得许可,则从那里开始 Activity
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
if(requestCode == PERMISSION_ALL){
if(grantResults.length>0 && grantResults[0]==PackageManager.PERMISSION_GRANTED ){
new Thread(new Runnable() {
@Override
public void run() {
Intent intent = new Intent(StartActivity.this, Details.class);
startActivity(intent);
}
}).start();
}else{
Toast.makeText(MainActivity.this, "Access Denied ! Cannot proceed further ", Toast.LENGTH_SHORT).show();
}
}
}
注意:显然,代码似乎在 StartupActivity
中(来自 StartupActivity.this
),因此您不需要创建线程,只需启动您的 Details
Activity
简单 Intent
代码将是
class StartupActivity extends ..{
onCreate...(){}
// here you will have onRequestPermissionsResult
@Override
public void onRequestPermissionsResult( ....){...}
}
@Override
onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults)
{
// Handle your permission grant/reject scenarios here,
for( int x = 0; x < grantResults.length; x++ )
{
if( grantResults[x] == PackageManager.PERMISSION_GRANTED )
{
// Since you had one, start your new activity here
}
else
{
// Do something with the permissions that got BLOCKED??
}
}
}
这将由 android 内部调用,一旦用户 grants/rejects 获得许可
是的,您需要覆盖 onRequestPermissionsResult
首先在 onCreate
int PERMISSION_ALL = 1;
String[] PERMISSIONS = new String[0];
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
PERMISSIONS = new String[]{
Manifest.permission.ACCESS_FINE_LOCATION};
}
if (!hasPermissions(getApplicationContext(), PERMISSIONS)) {
ActivityCompat.requestPermissions(StartupActivity.this, PERMISSIONS, PERMISSION_ALL);
}
然后覆盖
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
if (requestCode == PERMISSION_ALL) {
Intent intent = new Intent(StartActivity.this,Details.class);
startActivity(intent);
}
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
}
当您的应用请求权限时,系统会向用户显示一个对话框。当用户响应时,系统会调用您应用的 onRequestPermissionsResult() 方法,将用户响应传递给它。您的应用程序必须重写该方法才能确定是否授予了权限。回调传递给您传递给 requestPermissions() 的相同请求代码。例如,如果应用程序请求 READ_CONTACTS 访问,它可能具有以下回调方法:
@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.
} else {
// permission denied, boo! Disable the
// functionality that depends on this permission.
}
return;
}
// other 'case' lines to check for other
// permissions this app might request
}
}