如何动态获取Cordova插件中的包名?

时间:2017-08-13 21:53:55

标签: android cordova

我开发了一个Cordova插件,可以打开一个包含Twitter搜索时间轴的新视图。以下是构建它的类:

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项目,我不知道他们的包名称。将Android平台添加到Cordova项目时会生成MainActivity.java文件。有没有办法可以动态获取包名?或者为了使这项工作有更好的方法来构建我的结构?

1 个答案:

答案 0 :(得分:1)

我最初的问题可能首先是愚蠢的,但这是解决方案:

我已经删除了R包的用法,因此消除了项目的依赖性,不再需要知道项目的包名。 我从调用方法中获取了资源Id(因为这对我来说很方便,因为类扩展了CordovaPlugin)。

<p class="test">
Conact Me
</p>

.test {
border-top-style: solid;
border-bottom-style: solid;
border-bottom-width: 1px;
}

通过意图,因此避免使用R。

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());
    }

}