英文:
Check if external activity opened successfully?
问题
如何检查设置中的外部活动是否成功打开?在这种情况下,我想要检查Settings.ACTION_LOCATION_SOURCE_SETTINGS
是否成功打开。
这是我的代码:
Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
startActivity(intent);
英文:
How do I check if an external activity in Settings has opened successfully? In this case, I want to check if Settings.ACTION_LOCATION_SOURCE_SETTINGS
opened successfully.
Here's my code:
Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
startActivity(intent);
答案1
得分: 1
如果(intent.resolveActivity(getPackageManager()) == null){
// 没有找到可以处理此意图的Activity。
}
else {
// 存在可以处理此意图的Activity。
}
英文:
if (intent.resolveActivity(getPackageManager()) == null) {
// No Activity found that can handle this intent.
}
else{
// There is an activity which can handle this intent.
}
答案2
得分: 0
或许,你可以使用一个boolean
标志变量来检查是否应该监听当前Activity
的onPause()
生命周期事件。
然后,我们可以在onPause()
内部检查这个标志变量的值。如果它为真,那么很可能是因为下一个Activity
成功打开而调用了它。一个示例Activity
可能如下所示:
public class MainActivity extends AppCompatActivity {
// 用于检查是否已打开其他活动的布尔变量
// 如果已打开,我们的这个活动将被暂停
private boolean externalActivityOpened = false;
// 用于过滤所有其他可能导致我们的活动暂停的情况的布尔变量
private boolean startLookingIfCurrentActivityIsPaused = false;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
openLocationSettings();
}
private void openLocationSettings() {
Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
// 将变量设置为true...如果此时活动已暂停,那么很有可能是因为打开了位置设置
startLookingIfCurrentActivityIsPaused = true;
// 除了这一点发生干扰,如电话呼叫之外,此解决方案应该能正常工作
startActivity(intent);
}
@Override
protected void onPause() {
super.onPause();
// 我们检查是否在我们想要启动位置设置之后调用了onpause
// 如果是的话,几乎可以肯定新的活动已经启动了
if (startLookingIfCurrentActivityIsPaused) {
externalActivityOpened = true;
startLookingIfCurrentActivityIsPaused = false;
Toast.makeText(this, "新的活动已经启动!", Toast.LENGTH_LONG).show();
}
}
}
英文:
Maybe, you can use some boolean
flag variable to check whether or not we should be listening to onPause()
lifecycle event of the current Activity
.
Then, we can check the value of this flag variable inside the onPause()
. If it's true then it's more likely that it is called because the next Activity
is opened successfully. A sample Activity
may look like this:
public class MainActivity extends AppCompatActivity {
// a boolean variable to check whether or not another activity is opened or not
// if opened our this activity will be paused
private boolean externalActivityOpened = false;
// a boolean variable to filter all other condition due to which our activity
// can be paused
private boolean startLookingIfCurrentActivityIsPaused = false;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
openLocationSettings();
}
private void openLocationSettings() {
Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
// set variable to true...if activity is paused now, there is high chance
// that it is paused because the location settings has been opened
startLookingIfCurrentActivityIsPaused = true;
// this solution will fail if at this very point the interruption occurs such as a phone call
// other than that it should work fine I guess xD
startActivity(intent);
}
@Override
protected void onPause() {
super.onPause();
// we check to see if onpause is called after we wanted to start the location settings
// if yes then it is almost certain that the new activity has been started
if (startLookingIfCurrentActivityIsPaused) {
externalActivityOpened = true;
startLookingIfCurrentActivityIsPaused = false;
Toast.makeText(this, "New activity has been started!", Toast.LENGTH_LONG).show();
}
}
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论