2017-08-13 72 views
0

我开发了一个Cordova插件,可以打开包含Twitter搜索时间表的新视图。以下是建立它的类:如何动态获取Cordova插件中的包名称?

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; 

我还添加了一行到插件。 XML为了把我TimelineListActivity.java在同一文件夹中MainActivity.java,只要项目建:

<source-file src="src/android/TimelineListActivity.java" target-dir="src/com/example/hello" /> 

它是这样工作的,但有一个问题。由于这是一个插件,我想将它添加到其他Cordova项目中,我不知道它们的软件包名称。将Android平台添加到Cordova项目时生成MainActivity.java文件。有没有一种方法可以动态获取包名?或者是否有更好的方法来实现我的结构?

回答

0

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

我已删除[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()); 
    } 

} 

通过了它通过的意图,因此避免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); 
    } 
} 
的使用
相关问题