【发布时间】:2016-05-05 21:36:59
【问题描述】:
例如:我的应用调用原生设置活动,通过
Intent myIntent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
startActivityForResult(myIntent, CODE);
然后当它完成时(例如按下后退按钮)我想知道。我尝试过这种方式,但是当本机活动完成时没有调用onActivityResult()...所以我的应用程序没有收到通知...
我该怎么办?有谁知道吗?
谢谢...
编辑:
谢谢大家。 完整的代码是:
public class MainActivity extends AppCompatActivity {
public static final int DIALOG_CODE = 0x1;
private TextView txtGps;
private TextView txtNet;
private LocationManager manager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
first();
}
private void checkConfigs() {
boolean gps = manager.isProviderEnabled(LocationManager.GPS_PROVIDER);
boolean net = manager.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
setWidgets(gps, net);
if (gps && net){
Toast.makeText(this, "Configurações Ok!", Toast.LENGTH_SHORT).show();
} else {
DialogConfig.exibDialog(getFragmentManager());
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if ((requestCode == DIALOG_CODE) && (resultCode == RESULT_OK)){
checkConfigs();
} else {
Toast.makeText(this, "As config não foram alteradas!", Toast.LENGTH_SHORT).show();
}
}
public void setWidgets(boolean gsp, boolean net){
if (gsp){
txtGps.setText(R.string.gps_hab);
} else {
txtGps.setText(R.string.gps_n_hab);
}
if (net){
txtNet.setText(R.string.wifi_hab);
} else {
txtNet.setText(R.string.wifi_n_hab);
}
}
private View.OnClickListener onClickCheck() {
return new View.OnClickListener() {
@Override
public void onClick(View v) {
checkConfigs();
}
};
}
@SuppressWarnings("ConstantConditions")
private void first() {
txtGps = (TextView) findViewById(R.id.txt_gps);
txtNet = (TextView) findViewById(R.id.txt_net);
manager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
findViewById(R.id.btn_check).setOnClickListener(onClickCheck());
}
public static class DialogConfig extends DialogFragment {
public static void exibDialog(FragmentManager fm){
new DialogConfig().show(fm, "dialog");
}
@Override
public android.app.Dialog onCreateDialog(Bundle savedInstanceState) {
return new AlertDialog.Builder(getActivity())
.setTitle("As conf não estão corretas! Alt configs?")
.setPositiveButton("Ok", onOk())
.setNegativeButton("Cancel", onCancel())
.create();
}
private DialogInterface.OnClickListener onCancel() {
return new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dismiss();
}
};
}
private DialogInterface.OnClickListener onOk() {
return new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Intent myIntent = new Intent( Settings.ACTION_LOCATION_SOURCE_SETTINGS);
startActivityForResult(myIntent, DIALOG_CODE);
}
};
}
}
}
[已解决]
再次感谢大家,我再次尝试,在dialog中创建了一个回调接口,这样可以通知activity并自行调用其他原生设置activity,并在onActivityResult()中得到响应,但只比较了一个代码(不是通过RESULT_OK),这种方式有效。但是还有另一种使用生命周期的方法(就像建议的那样),对我来说似乎更容易。
【问题讨论】:
-
您的活动将使用标准生命周期方法调用:
onRestart()、onStart()和onResume()。请注意,这些也会因其他原因被调用(例如,用户按下 HOME 并返回)。 -
显示你的 onActivityResult 方法
-
您确定该活动应该返回一些东西给您吗?
-
也许这个帖子可以帮助你:stackoverflow.com/questions/11919259/…
-
你处理你的 onBackPress() 方法吗?如果没有,则覆盖该方法并将您的代码放在那里以返回结果