[英]Removing Android Intent launcher and launch an app from a button in another app
[英]How to launch and receive output from another app through intent in react native?
我已經使用VSCode創建了react native應用程序,現在,我必須使用micro USB主機集成讀取器設備。
我已安裝閱讀器應用程序以測試APK。 基於網絡,我可以通過當前應用程序的意圖調用閱讀器應用程序。 設備Web鏈接在這里 。
目前,我已經嘗試通過意圖調用本機應用程序的搜索教程。 但是我陷入了腳本編寫的困境。 我要么應該創建新文件,要么將腳本粘貼到現存目錄下/將現存./android/app/src/main/java/com/myAppName/MainApplication.java
替換為./android/app/src/main/java/com/myAppName/MainApplication.java
以及如何在中調用和接收來自我的掃描儀類的輸出./src/screens/scanScreens/mainScanner.js
以下是我所經歷的,但留着下一步應該做的事情:-
我目前的MainActivity.java [更新]
package com.myappname;
import com.facebook.react.ReactActivity;
import com.facebook.react.ReactActivityDelegate;
import com.facebook.react.ReactRootView;
import com.swmansion.gesturehandler.react.RNGestureHandlerEnabledRootView;
public class MainActivity extends ReactActivity {
/**
* Returns the name of the main component registered from JavaScript.
* This is used to schedule rendering of the component.
*/
@Override
protected String getMainComponentName() {
return "myAppName";
}
@Override
protected ReactActivityDelegate createReactActivityDelegate() {
return new ReactActivityDelegate(this, getMainComponentName()) {
@Override
protected ReactRootView createRootView() {
return new RNGestureHandlerEnabledRootView(MainActivity.this);
}
};
}
}
public class ShowKadModule extends ReactContextBaseJavaModule {
@ReactMethod
public void showKadApp() {
final Activity activity = getCurrentActivity();
Intent intent = new Intent ("com.causalidea.cikad.showkad.READ_MYKAD");
Bundle extras = new Bundle ();
extras.putBoolean ("READ_PHOTO", false); // Do not read the photo
intent.putExtras (extras);
activity.startActivityForResult (intent, 0);
}
public ShowKadModule(ReactApplicationContext reactContext) {
super(reactContext);
// Add the listener for `onActivityResult`
reactContext.addActivityEventListener(mActivityEventListener);
}
@Override
public String getName() {
return "ShowKadModule";
}
@Override
public void onActivityResult(int requestCode, int resultCode, final Intent data) {
if (resultCode == Activity.RESULT_OK) {
extras = intent.getExtras ();
if (extras != null) {
extras.getString ("IC_NUMBER");
extras.getString ("NAME");
extras.getString ("GENDER");
extras.getString ("CITIZENSHIP");
extras.getString ("BIRTH_DATE");
extras.getString ("RACE");
extras.getString ("RELIGION");
extras.getString ("ADDRESS_1");
extras.getString ("ADDRESS_2");
extras.getString ("ADDRESS_3");
extras.getString ("POSTCODE");
extras.getString ("CITY");
extras.getString ("STATE");
photoByteArray = extras.getByteArray ("PHOTO");
if (photoByteArray != null) {
bitmap = BitmapFactory.decodeByteArray (photoByteArray, 0, photoByteArray.length);
imageView.setImageBitmap (bitmap);
}
}
} else if (resultCode == Activity.RESULT_CANCELED) {
}
}
}
經過大量示例和教程之后,我找到了一個簡單的解決方案。 通過從此處安裝react-native-activity-result。
我如何執行此操作如下:
import ActivityResult from 'react-native-activity-result';
_onLaunch = async () => {
const activity = await ActivityResult.resolveActivity('com.causalidea.cikad.showkad.READ_MYKAD');
if (!activity) {
console.warn('Please install the othe app.');
ToastAndroid.show(`MyKAD application reader is not install`, ToastAndroid.SHORT, ToastAndroid.BOTTOM);
} else {
console.log(`Activity will be handled by ${activity.package}`);
ToastAndroid.show(`Activity will be handled by ${activity.package}`, ToastAndroid.SHORT, ToastAndroid.BOTTOM);
}
// Start an activity for a result
let uniqueId = 0;
let args = {READ_PHOTO: false};
ToastAndroid.show(`Test`, ToastAndroid.SHORT, ToastAndroid.BOTTOM);
const response = await ActivityResult.startActivityForResult(uniqueId, 'com.causalidea.cikad.showkad.READ_MYKAD', args);
ToastAndroid.show(`Result code: ${response.resultCode}`, ToastAndroid.LONG, ToastAndroid.BOTTOM);
if (response.resultCode !== ActivityResult.OK) {
ToastAndroid.show(`Invalid result from activity.`, ToastAndroid.SHORT, ToastAndroid.BOTTOM);
throw new Error('Invalid result from activity.');
} else {
console.log('Got the following response: ' + response.data);
ToastAndroid.show(`Response:\n${JSON.stringify(response)}`, ToastAndroid.SHORT, ToastAndroid.BOTTOM);
}
// Finish an activity with a result. This will close the caller too.
//ActivityResult.finish(ActivityResult.OK, 'com.causalidea.cikad.showkad.READ_MYKAD', args);
}
我可以啟動另一個應用程序並等待活動結果,然后它會相應地工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.