我开发了一个 Cordova 插件,可以打开一个包含 Twitter 搜索时间轴的新 View 。以下是构建它的类:
package com.example.hello;
import com.twitter.sdk.android.tweetui.TweetTimelineListAdapter;
import com.twitter.sdk.android.tweetui.SearchTimeline;
import android.os.Bundle;
import android.app.ListActivity;
public class TimelineListActivity extends ListActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
Bundle recdData = getIntent().getExtras();
String hashtag = recdData.getString("hashtag");
super.onCreate(savedInstanceState);
setContentView(R.layout.timeline);
SearchTimeline searchTimeline = new SearchTimeline.Builder().query(hashtag).build();
final TweetTimelineListAdapter adapter = new TweetTimelineListAdapter(this, searchTimeline);
setListAdapter(adapter);
}
}
由于找不到 R 包,我在编译项目时遇到了一些困难。我找到的唯一解决方案是让我的类位于 MainActivity.java 文件附近并与 MainActivity 在同一个包中,因此:
package com.example.hello;
我还在 plugin.xml 中添加了一行,以便在构建项目时将我的 TimelineListActivity.java 放在与 MainActivity.java 相同的文件夹中:
<source-file src="src/android/TimelineListActivity.java" target-dir="src/com/example/hello" />
它是这样工作的,但是有一个问题。由于这是一个插件,我想将它添加到其他 Cordova 项目中,但我不知道它们的包名。 MainActivity.java文件是在将android平台添加到Cordova项目时生成的。有没有办法动态获取包名?或者是否有更好的方法来实现我的结构?
最佳答案
我最初的问题一开始可能很愚蠢,但这是解决方案:
我去掉了R包的使用,从而消除了项目的依赖,不再需要知道项目的包名。 我从调用方方法获取资源 ID(因为类扩展 CordovaPlugin 对我来说很方便)。
private void showTimeline(final String query, final Activity activity, final CallbackContext callbackContext) {
try {
Context context = cordova.getActivity().getApplicationContext();
Intent intent = new Intent(context, Class.forName("com.manifestwebdesign.twitterconnect.TimelineListActivity"));
intent.putExtra("query", query);
int resourceId = cordova.getActivity().getResources().getIdentifier("timeline", "layout", cordova.getActivity().getPackageName());
intent.putExtra("resourceid", resourceId);
cordova.startActivityForResult(this, intent, 1);
callbackContext.success();
}
catch(Exception e) {
System.err.println("Exception: " + e.getMessage());
callbackContext.error(e.getMessage());
}
}
通过 Intent 传递它,因此避免使用 R。
public class TimelineListActivity extends ListActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
Bundle recdData = getIntent().getExtras();
String query = recdData.getString("query");
int resourceId = recdData.getInt("resourceid");
super.onCreate(savedInstanceState);
setContentView(resourceId);
SearchTimeline searchTimeline = new SearchTimeline.Builder().query(query).build();
final TweetTimelineListAdapter adapter = new TweetTimelineListAdapter(this, searchTimeline);
setListAdapter(adapter);
}
}
关于android - 如何动态获取 Cordova 插件中的包名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45665240/