我正在使用React-Native(^ 0.35.0)来制作Android应用程序.在某种情况下,我需要检查是否存在互联网连接.如果没有互联网连接,那么我需要显示一个按钮,该按钮将打开设备设置(用户可通过该设置启用其连接).
我正在使用react-native提供的链接库.
我正在尝试以下方式:
componentWillMount(){ Linking.canOpenURL('app-settings:') .then(supported => { if (!supported) { console.log('Can\'t handle url: ' + url); } else { return Linking.openURL('app-settings:'); } }).catch(err => console.error('An error occurred',err)); }
然后上面的代码给出 – 控制台无法处理url:app-settings:
当我尝试以下时:
componentWillMount(){ Linking.canOpenURL('app-settings:') .then(supported => { return Linking.openURL('app-settings:'); }).catch(err => console.error('An error occurred',err)); }
上面的代码给出了 – 错误:无法打开URL’app-settings:’:找不到处理Intent的Activity {act = android.intent.action.VIEW dat = app-settings:flg = 0x10000000}
这里有什么我想念的吗?或是否需要更改任何其他文件,如AndroidMainfest.xml,MainActivity.java等.
我使用了相同的步骤来打开设备网络操作符设置.上面的步骤非常有用.
这是我的代码.
package com.<projectname>.opensettings; import android.app.Activity; import android.content.Intent; import com.facebook.react.bridge.Callback; import com.facebook.react.bridge.ReactApplicationContext; import com.facebook.react.bridge.ReactMethod; import com.facebook.react.bridge.ReactContextBaseJavaModule; public class OpenSettingsModule extends ReactContextBaseJavaModule { @Override public String getName() { /** * return the string name of the NativeModule which represents this class in JavaScript * In JS access this module through React.NativeModules.OpenSettings */ return "OpenSettings"; } @ReactMethod public void openNetworkSettings(Callback cb) { Activity currentActivity = getCurrentActivity(); if (currentActivity == null) { cb.invoke(false); return; } try { currentActivity.startActivity(new Intent(android.provider.Settings.ACTION_SETTINGS)); cb.invoke(true); } catch (Exception e) { cb.invoke(e.getMessage()); } } /*This is for open location Settings*/ @ReactMethod public void openLocationSettings(Callback cb) { Activity currentActivity = getCurrentActivity(); if (currentActivity == null) { cb.invoke(false); return; } try { currentActivity.startActivity(new Intent(android.provider.Settings.ACTION_NETWORK_OPERATOR_SETTINGS)); cb.invoke(true); } catch (Exception e) { cb.invoke(e.getMessage()); } } /* constructor */ public OpenSettingsModule(ReactApplicationContext reactContext) { super(reactContext); } }
您需要做的就是将常量(如ACTION_NETWORK_OPERATOR_SETTINGS)放在上面的代码中,并创建自己的函数,就像上面创建的函数一样,即openNetworkSettings.其他步骤4,5和6是相同的.
以下是常量列表:
https://developer.android.com/reference/android/provider/Settings.html