Qt 앱에서 Android 설정을 엽니 다 (com.android.settings)
-
21-12-2019 - |
문제
Qt에 Android 응용 프로그램이 있습니다. 버튼에서 Android 설정을 호출하고 싶습니다.
이 코드를 Java에서 사용했습니다.
public void usb(View v){
Intent intent = new Intent();
intent.setClassName("com.android.settings", "com.android.settings.DevelopmentSettings");
startActivity(intent);
}
.
Qt C ++을 사용하여 Android 설정을 호출하는 방법이 있습니까?
해결책
QandroidjniObject를 사용하면 Qt C ++ 코드에서 JNI 객체를 만들 수 있습니다.
예 : 활동을 얻으려면
QAndroidJniObject activity = QAndroidJniObject::callStaticObjectMethod("org/qtproject/qt5/android/QtNative", "activity", "()Landroid/app/Activity;");
.
예를 들면 다음과 같습니다.
QAndroidJniObject intent("android/content/Intent","()V");
.
단계별로 이동하여 Java 코드를 C ++에서 실행할 수 있습니다 ....
특정 질문에 답하기 위해이 코드를 복사 / 붙여 넣기만으로 :
QAndroidJniObject activity = QAndroidJniObject::callStaticObjectMethod("org/qtproject/qt5/android/QtNative", "activity", "()Landroid/app/Activity;"); //activity is valid
if ( activity.isValid() )
{
// Equivalent to Jave code: 'Intent intent = new Intent();'
QAndroidJniObject intent("android/content/Intent","()V");
if ( intent.isValid() )
{
QAndroidJniObject param1 = QAndroidJniObject::fromString("com.android.settings");
QAndroidJniObject param2 = QAndroidJniObject::fromString("com.android.settings.DevelopmentSettings");
if ( param1.isValid() && param2.isValid() )
{
// Equivalent to Jave code: 'intent.setClassName("com.android.settings", "com.android.settings.DevelopmentSettings");'
intent.callObjectMethod("setClassName","(Ljava/lang/String;Ljava/lang/String;)Landroid/content/Intent;",param1.object<jobject>(),param2.object<jobject>());
// Equivalent to Jave code: 'startActivity(intent);'
activity.callObjectMethod("startActivity","(Landroid/content/Intent;)V",intent.object<jobject>());
}
}
}
.
... 그리고 다음 투표하십시오!; -)
다른 팁
Qt :
를 사용하여 Application Manager에서 특정 응용 프로그램 (패키지 ID)의 세부 정보를 열 수있는 방법입니다.QAndroidJniObject activity = QAndroidJniObject::callStaticObjectMethod("org/qtproject/qt5/android/QtNative", "activity", "()Landroid/app/Activity;"); //activity is valid
if (activity.isValid())
{
QAndroidJniObject param = QAndroidJniObject::fromString("package:com.example.mycoolapp");
// Equivalent to Jave code: 'Uri uri = Uri::parse("...");'
QAndroidJniObject uri = QAndroidJniObject::callStaticObjectMethod("android/net/Uri", "parse", "(Ljava/lang/String;)Landroid/net/Uri;", param.object<jstring>());
if (!uri.isValid()) {
qWarning("Unable to create Uri object");
return;
}
QAndroidJniObject packageName = QAndroidJniObject::fromString("android.settings.APPLICATION_DETAILS_SETTINGS");
QAndroidJniObject intent("android/content/Intent","(Ljava/lang/String;)V", packageName.object<jstring>());
if (!intent.isValid()) {
qWarning("Unable to create Intent object");
return;
}
intent.callObjectMethod("addCategory", "(Ljava/lang/String;)Landroid/content/Intent;", QAndroidJniObject::fromString("android.intent.category.DEFAULT").object<jstring>());
intent.callObjectMethod("setData", "(Landroid/net/Uri;)Landroid/content/Intent;", uri.object<jobject>());
activity.callObjectMethod("startActivity","(Landroid/content/Intent;)V",intent.object<jobject>());
}
. 사용자 정의 Android 설정 응용 프로그램에서는 수락 된 답변이 작동하지 않으며 새로운 Android 한 휴대 전화에서도 실패했습니다. 그 외에도 개발자 페이지에서 열립니다.
은 첫 페이지에서 기본 설정 앱을 엽니 다이며 다른 페이지에서 쉽게 변경할 수있는 작업 코드 (Qt 5.12)가 있습니다.
const QAndroidJniObject ACTION_SETTINGS = QAndroidJniObject::getStaticObjectField("android/provider/Settings",
"ACTION_SETTINGS",
"Ljava/lang/String;");
if (ACTION_SETTINGS.isValid()) {
const QAndroidIntent intent(ACTION_SETTINGS.toString());
QtAndroid::startActivity(intent.handle(), 10101);
}
. 제휴하지 않습니다 StackOverflow