标签:QQ void public react promise Override new Android MyModule
-
添加
open_sdk_xxxx_lite.jar
-
必要权限
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
- 注册 Activity
<activity
android:name="com.tencent.tauth.AuthActivity"
android:launchMode="singleTask"
android:noHistory="true">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="tencent你的AppId" />
</intent-filter>
</activity>
<activity
android:name="com.tencent.connect.common.AssistActivity"
android:configChanges="orientation|keyboardHidden"
android:screenOrientation="behind"
android:theme="@android:style/Theme.Translucent.NoTitleBar" />
- MainActivity.java
public class MainActivity extends ReactActivity {
static MyListener listener;
static Tencent tencent;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
tencent = Tencent.createInstance("AppId", this);
listener = new MyListener();
}
private static class MyListener implements IUiListener {
@Override
public void onComplete(Object o) {
JSONObject jsonObject = (JSONObject) o;
try {
String openid = jsonObject.getString("openid");
WritableMap map = Arguments.createMap();
map.putString("openid", openid);
MyModule.promise.resolve(map);
} catch (JSONException e) {
MyModule.promise.reject(new Exception("操作失败"));
}
}
@Override
public void one rror(UiError uiError) {
MyModule.promise.reject(new Exception("操作失败"));
}
@Override
public void onCancel() {
MyModule.promise.reject(new Exception("操作失败"));
}
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
Tencent.onActivityResultData(requestCode, resultCode, data, listener);
}
}
- MyModule.java 原生模块,供JS调用
public class MyModule extends ReactContextBaseJavaModule {
private static ReactApplicationContext reactApplicationContext;
public static Promise promise;
@NonNull
@Override
public String getName() {
return "MyModule";
}
MyModule(@NonNull ReactApplicationContext reactContext) {
super(reactContext);
reactApplicationContext = reactContext;
}
@ReactMethod
public void qqLogin(Promise promise) {
MyModule.promise = promise;
MainActivity.tencent.login(getCurrentActivity(), "all", MainActivity.listener);
}
}
- MyPackage.java 注册模块
public class MyPackage implements ReactPackage {
@NonNull
@Override
public List<NativeModule> createNativeModules(@NonNull ReactApplicationContext reactContext) {
List<NativeModule> modules = new ArrayList<>();
modules.add(new MyModule(reactContext));
return modules;
}
@NonNull
@Override
public List<ViewManager> createViewManagers(@NonNull ReactApplicationContext reactContext) {
return Collections.emptyList();
}
}
- JavaScript 端访问
import {
ToastAndroid,
NativeModules
} from 'react-native';
NativeModules.MyModule.qqLogin().then(({ openid }) => {
ToastAndroid.show(openid, ToastAndroid.SHORT)
}).catch(reason => {
console.log(reason)
})
标签:QQ,void,public,react,promise,Override,new,Android,MyModule 来源: https://www.cnblogs.com/stefzi/p/13278148.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。