Y.S*_*Y.S 22 android android-activity android-permissions activity-manager android-6.0-marshmallow
众所周知,当我们在Android 6.0中拒绝运行时的权限并从最近的菜单中恢复应用程序时,应用程序进程将被终止,应用程序将被强制重新启动.据称这是为了防止任何安全问题:
值得注意的是,当恢复时,应用程序会从最后一次重新开始Activity.操作系统显然跟踪Activity用户访问的最后一次.
不幸的是,这是一个问题,因为它打破了业务逻辑的流程.不允许用户以这种方式中途访问应用程序.
我的问题是,有没有办法强制应用程序从Activity应用程序的第一个重新启动,而不是用户将其保留的应用程序?
是否有与应用程序重启/进程终止/权限切换相关的回调?
这是一种错误的做法吗?如果是这样,怎么样?什么是正确的方法?
这种行为当然在以前被观察过:
2. 启用/禁用Android M nexus 6上的设置权限后,应用程序将被终止
小智 1
你是这个意思吗?
主要活动:
public class MainActivity extends AppCompatActivity {
TextView txt;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
txt = (TextView)findViewById(R.id.txt);
txt.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this, ActivityB.class);
intent.putExtra("from","MainActivity");
startActivity(intent);
finish();
}
});
}
}
Run Code Online (Sandbox Code Playgroud)
活动B:
public class ActivityB extends AppCompatActivity {
String intentTxt="";
final int MY_PERMISSIONS_REQUEST_PHONE_CALL = 1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_b);
intentTxt = getIntent().getStringExtra("from");
}
@Override
protected void onResume() {
super.onResume();
if(intentTxt.equals("MainActivity")) {
if (ContextCompat.checkSelfPermission(ActivityB.this, android.Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(ActivityB.this, new String[]{android.Manifest.permission.CALL_PHONE},
MY_PERMISSIONS_REQUEST_PHONE_CALL);
}
}
intentTxt = "";
}
@Override
public void onRequestPermissionsResult(int requestCode,
String permissions[], int[] grantResults) {
switch (requestCode) {
case MY_PERMISSIONS_REQUEST_PHONE_CALL: {
if (grantResults.length > 0
&& grantResults[0] == PackageManager.PERMISSION_GRANTED) {
Intent intent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:" + "32434"));
startActivity(intent);
} else {
Intent intent = new Intent(ActivityB.this,MainActivity.class);
startActivity(intent);
finish();
}
return;
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
可以从ActivityB的onRequestPermissionsResult中启动splashActivity/HomeActivity,在ActivityB的onResume中检查权限,这样ActivityB第一次调用和恢复时都会出现权限对话框。
| 归档时间: |
|
| 查看次数: |
3667 次 |
| 最近记录: |