2017-08-13 12 views
0

私は、Twitterの検索タイムラインを含む新しいビューを開くCordovaプラグインを開発しました。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; 

私はまた、プラグインに行を追加しました。プロジェクトが建設された時はいつでもMainActivity.java、同じフォルダ内に自分のTimelineListActivity.javaを置くためのXML:

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

それはこのように動作しますが、問題があります。これはプラグインなので、他のCordovaプロジェクトに追加したいと思います。パッケージ名はわかりません。 MainActivity.javaファイルは、アンドロイドプラットフォームをCordovaプロジェクトに追加するときに生成されます。パッケージ名を動的に取得する方法はありますか?それとも、私の構造を改善するアプローチがありますか?

答えて

0

私の最初の質問は、おそらく最初の場所でのダムだったが、ここで解決策ません。したがって、プロジェクトのパッケージ名を知っておく必要があり、もはやプロジェクトの依存関係を解消して、

私はRパッケージの使用を削除しました。 呼び出し元メソッドからリソースIDを取得します(クラス拡張CordovaPlugin以降は便利でした)。従って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); 
    } 
} 
の使用を避け、意図を通してそれを合格

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

} 

関連する問題