【发布时间】:2020-11-24 18:08:00
【问题描述】:
我正在我的项目中实施本教程https://www.youtube.com/watch?v=mHUGtlEaXqs。 在教程结束时,我应该能够从导入的库中打开我的 MainActivity。 但是,按下按钮后我无法打开它。 我认为是因为我有两个 android 清单文件。 一个来自我的项目,另一个来自图书馆。 那么如何同步呢?
我的输出结果是,在我点击打开面部按钮后,它实际上是在打开相同的活动。 我认为我在按钮 OnClickListener 中正确放置了意图。
package com.example.cubacuba;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import com.microsoft.projectoxford.face.samples.ui.MainActivityFace;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final Button openface = findViewById(R.id.button);
openface.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this,
MainActivityFace.class);
startActivity(intent);
}
});
}
}
这是我的输出。在点击 Open Face 按钮后,应用程序仍然显示相同的活动,而不是显示库的 MainActivityFace。
这是我想要从 MainActivity 转到库的 MainActivity 的项目清单文件。
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="com.example.cubacuba">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.Cubacuba"
tools:replace="android:theme">
<activity android:name=".MainActivity"
android:launchMode="singleTop"
android:screenOrientation="portrait" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name="com.microsoft.projectoxford.face.samples.ui.MainActivity"
android:launchMode="singleTop"
android:parentActivityName=".MainActivity"
android:screenOrientation="portrait" >
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value=".MainActivity" />
</activity>
</application>
</manifest>
这是我导入到项目中的库的清单。
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="com.microsoft.projectoxford.face.samples" >
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<application
android:name=".helper.SampleApp"
android:allowBackup="true"
android:label="@string/app_name"
android:theme="@style/AppTheme"
tools:targetApi="donut">
<activity
android:name=".ui.MainActivityFace"
android:label="@string/app_name"
android:launchMode="singleTop"
android:screenOrientation="portrait" />
<activity
android:name=".ui.DetectionActivity"
android:label="@string/detection"
android:launchMode="singleTop"
android:parentActivityName=".ui.MainActivityFace"
android:screenOrientation="portrait" >
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value=".ui.MainActivityFace" />
</activity>
<activity
android:name=".ui.SelectImageActivity"
android:label="@string/select_an_image"
android:screenOrientation="portrait" />
</application>
</manifest>
我的项目的 gradle 文件:
plugins {
id 'com.android.application'
}
android {
compileSdkVersion 28
buildToolsVersion "28.0.3"
defaultConfig {
applicationId "com.example.cubacuba"
minSdkVersion 22
targetSdkVersion 28
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}
dependencies {
implementation 'androidx.appcompat:appcompat:1.2.0'
implementation 'com.google.android.material:material:1.2.1'
implementation 'androidx.constraintlayout:constraintlayout:2.0.2'
testImplementation 'junit:junit:4.+'
androidTestImplementation 'androidx.test.ext:junit:1.1.2'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'
implementation project(':face')
}
我导入的项目库的 gradle 文件:
apply plugin: 'com.android.library'
android {
compileSdkVersion 28
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}
dependencies {
implementation fileTree(include: ['*.jar'], dir: 'libs')
// Include local lib mostly for debug purpose.
// implementation project(':lib')
// Use the following line to include client library for Face API from Maven
Central Repository
implementation 'com.microsoft.projectoxford:face:1.4.4'
implementation 'com.android.support:appcompat-v7:28.1.0'
implementation 'com.google.code.gson:gson:2.8.5'
}
【问题讨论】:
-
你能添加其他项目的和你的 build.gradle 吗?
-
当然@Sarah 检查编辑的问题
-
我在库的清单文件中没有看到 MainActivityFace 活动
-
我必须将相同的代码活动复制到库的清单文件中吗?我试过了,但无法初始化 MainActivity 父名称。它给出了错误@Sarah
-
检查我更新的图书馆清单条目。运行代码后,我仍然得到相同的输出@Sarah
标签: android android-studio shared-libraries android-manifest manifest