【问题标题】:Intent not opening the next activity from project library I imported不打算从我导入的项目库中打开下一个活动
【发布时间】: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


【解决方案1】:

每个 Android Studio 项目都必须包含至少一个 Manifest 文件,但一个项目也可以包含多个 Manifest,例如,您可以为每种产品风格或构建类型创建不同的 Manifest。

由于您完成的 APK 只能包含一个 Manifest,Gradle 将在构建过程中合并您的所有 Manifest,以创建最终与您的应用程序一起提供的单个 Manifest 文件。

如果您的项目包含多个 Manifest,则 Android Studio 的合并工具会根据每个文件的优先级顺序合并每个文件,其中最低优先级的 Manifest 会合并到下一个最高优先级。

更多信息请参考此链接:https://www.androidauthority.com/androidmanifest-xml-992934/#:~:text=%20If%20your%20project%20contains%20multiple%20Manifest%20files,screenshot%29.%20This%20will%20open%20a%20%E2%80%9CMerged...%20More%20

【讨论】:

    猜你喜欢
    • 2023-04-05
    • 2012-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-28
    • 2013-05-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多