我怎样才能从图书馆向 activity 发出意向?
How can I make an intent to an activity from a library?
我创建了一个库项目,然后构建它,获取 .aar 并解压缩。
获取包含库的 classes.jar 文件,并将其添加到另一个项目中。
该项目识别我的文件,我可以从中调用方法和函数。
我的问题是我尝试从我的库中调用 Activity 的意图,如下所示:
textView = (TextView) findViewById(R.id.text);
textView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this, InCallActivity.class);
intent.putExtra("duration",20);
intent.putExtra("message","test");
intent.putExtra("url","https://facetalk.vidyo-nl.com/mobile.html?roomdirect.html&key=QMvMp3eKTqOeLAWQ6HOvHqFJd0");
intent.putExtra("test","true");
startActivity(intent);
}
});
但我遇到这样的问题:
08-10 15:02:41.730: E/AndroidRuntime(18572): Process: com.vidyo.facetalklibtest, PID: 18572
08-10 15:02:41.730: E/AndroidRuntime(18572): android.content.ActivityNotFoundException: Unable to find explicit activity class {com.vidyo.facetalklibtest/com.vidyo.vidyocore.activities.InCallActivity}; have you declared this activity in your AndroidManifest.xml?
08-10 15:02:41.730: E/AndroidRuntime(18572): at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1794)
08-10 15:02:41.730: E/AndroidRuntime(18572): at android.app.Instrumentation.execStartActivity(Instrumentation.java:1512)
08-10 15:02:41.730: E/AndroidRuntime(18572): at android.app.Activity.startActivityForResult(Activity.java:3930)
08-10 15:02:41.730: E/AndroidRuntime(18572): at android.app.Activity.startActivityForResult(Activity.java:3890)
08-10 15:02:41.730: E/AndroidRuntime(18572): at android.app.Activity.startActivity(Activity.java:4213)
08-10 15:02:41.730: E/AndroidRuntime(18572): at android.app.Activity.startActivity(Activity.java:4181)
08-10 15:02:41.730: E/AndroidRuntime(18572): at com.vidyo.facetalklibtest.MainActivity.onClick(MainActivity.java:32)
08-10 15:02:41.730: E/AndroidRuntime(18572): at android.view.View.performClick(View.java:5204)
08-10 15:02:41.730: E/AndroidRuntime(18572): at android.view.View$PerformClick.run(View.java:21153)
08-10 15:02:41.730: E/AndroidRuntime(18572): at android.os.Handler.handleCallback(Handler.java:739)
08-10 15:02:41.730: E/AndroidRuntime(18572): at android.os.Handler.dispatchMessage(Handler.java:95)
08-10 15:02:41.730: E/AndroidRuntime(18572): at android.os.Looper.loop(Looper.java:148)
08-10 15:02:41.730: E/AndroidRuntime(18572): at android.app.ActivityThread.main(ActivityThread.java:5417)
08-10 15:02:41.730: E/AndroidRuntime(18572): at java.lang.reflect.Method.invoke(Native Method)
08-10 15:02:41.730: E/AndroidRuntime(18572): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
08-10 15:02:41.730: E/AndroidRuntime(18572): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
08-10 15:02:41.731: W/ActivityManager(787): Force finishing activity com.vidyo.facetalklibtest/.MainActivity
现在我发现了一些关于需要在 project.properties 文件中设置的清单合并 manifestmerger.enabled=true
。但是我正在使用 AndroidStudio,而不是 Eclipse,因此我没有那个文件。
我该如何解决这个问题?
How can I fix this issue?
正确使用库模块,通过 compile project(...)
、compile
指向存储库中库的工件,或者在紧要关头添加 compile file(...)
指向 AAR 文件。确保 AAR 具有包含您寻找的 <activity>
元素的清单。
IOW,删除以下内容:
took the .aar and unzipped it. Took the classes.jar file, which contains the library, and added it inside another project.
库模块和 AAR 以及 Android Studio 的清单合并是自动的;没有什么可以专门启用的。
您还需要在应用程序清单中使用完整路径声明 activity:
com.library.domain.activities.yourActivity
然后它可能会起作用。
<activity
android:name=".MainActivity">
<intent-filter>
<action android:name="com.example.main.mainactivity" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
在你的库中调用它来打开 MainActivity:
Intent intent = new Intent("com.example.main.mainactivity");
startActivity(intent);
我创建了一个库项目,然后构建它,获取 .aar 并解压缩。 获取包含库的 classes.jar 文件,并将其添加到另一个项目中。 该项目识别我的文件,我可以从中调用方法和函数。 我的问题是我尝试从我的库中调用 Activity 的意图,如下所示:
textView = (TextView) findViewById(R.id.text);
textView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this, InCallActivity.class);
intent.putExtra("duration",20);
intent.putExtra("message","test");
intent.putExtra("url","https://facetalk.vidyo-nl.com/mobile.html?roomdirect.html&key=QMvMp3eKTqOeLAWQ6HOvHqFJd0");
intent.putExtra("test","true");
startActivity(intent);
}
});
但我遇到这样的问题:
08-10 15:02:41.730: E/AndroidRuntime(18572): Process: com.vidyo.facetalklibtest, PID: 18572
08-10 15:02:41.730: E/AndroidRuntime(18572): android.content.ActivityNotFoundException: Unable to find explicit activity class {com.vidyo.facetalklibtest/com.vidyo.vidyocore.activities.InCallActivity}; have you declared this activity in your AndroidManifest.xml?
08-10 15:02:41.730: E/AndroidRuntime(18572): at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1794)
08-10 15:02:41.730: E/AndroidRuntime(18572): at android.app.Instrumentation.execStartActivity(Instrumentation.java:1512)
08-10 15:02:41.730: E/AndroidRuntime(18572): at android.app.Activity.startActivityForResult(Activity.java:3930)
08-10 15:02:41.730: E/AndroidRuntime(18572): at android.app.Activity.startActivityForResult(Activity.java:3890)
08-10 15:02:41.730: E/AndroidRuntime(18572): at android.app.Activity.startActivity(Activity.java:4213)
08-10 15:02:41.730: E/AndroidRuntime(18572): at android.app.Activity.startActivity(Activity.java:4181)
08-10 15:02:41.730: E/AndroidRuntime(18572): at com.vidyo.facetalklibtest.MainActivity.onClick(MainActivity.java:32)
08-10 15:02:41.730: E/AndroidRuntime(18572): at android.view.View.performClick(View.java:5204)
08-10 15:02:41.730: E/AndroidRuntime(18572): at android.view.View$PerformClick.run(View.java:21153)
08-10 15:02:41.730: E/AndroidRuntime(18572): at android.os.Handler.handleCallback(Handler.java:739)
08-10 15:02:41.730: E/AndroidRuntime(18572): at android.os.Handler.dispatchMessage(Handler.java:95)
08-10 15:02:41.730: E/AndroidRuntime(18572): at android.os.Looper.loop(Looper.java:148)
08-10 15:02:41.730: E/AndroidRuntime(18572): at android.app.ActivityThread.main(ActivityThread.java:5417)
08-10 15:02:41.730: E/AndroidRuntime(18572): at java.lang.reflect.Method.invoke(Native Method)
08-10 15:02:41.730: E/AndroidRuntime(18572): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
08-10 15:02:41.730: E/AndroidRuntime(18572): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
08-10 15:02:41.731: W/ActivityManager(787): Force finishing activity com.vidyo.facetalklibtest/.MainActivity
现在我发现了一些关于需要在 project.properties 文件中设置的清单合并 manifestmerger.enabled=true
。但是我正在使用 AndroidStudio,而不是 Eclipse,因此我没有那个文件。
我该如何解决这个问题?
How can I fix this issue?
正确使用库模块,通过 compile project(...)
、compile
指向存储库中库的工件,或者在紧要关头添加 compile file(...)
指向 AAR 文件。确保 AAR 具有包含您寻找的 <activity>
元素的清单。
IOW,删除以下内容:
took the .aar and unzipped it. Took the classes.jar file, which contains the library, and added it inside another project.
库模块和 AAR 以及 Android Studio 的清单合并是自动的;没有什么可以专门启用的。
您还需要在应用程序清单中使用完整路径声明 activity:
com.library.domain.activities.yourActivity
然后它可能会起作用。
<activity
android:name=".MainActivity">
<intent-filter>
<action android:name="com.example.main.mainactivity" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
在你的库中调用它来打开 MainActivity:
Intent intent = new Intent("com.example.main.mainactivity");
startActivity(intent);