2

私は Xposed 用のモジュールを作成しています。それは私が望むことを行いますが、2 つの整数値を入力するための単純な設定画面をユーザーに提供したいと考えています。

私は主に XDA でここにあるチュートリアルを使用しました。

チュートリアルでは、設定画面を表示および管理するにはアクティビティを作成する必要があると説明しています。しかし、その後、ユーザーがモジュールのリストでモジュールの名前をクリックして設定画面にアクセスできるように、それをXposedにリンクする方法についての説明はまったくありません。代わりに、「モジュールはユーザーインターフェイスを提供していません」というメッセージが表示されます"。

これを行う方法に関するドキュメントは見つかりませんでした。誰かがこれについて私に教えてもらえますか?

4

1 に答える 1

4

犯人を見つけたと思います(少なくともこれで問題は解決しました)。Xposedは、アプリに起動可能なアクティビティがあるかどうかを自動的に検出し、起動するようです。API はありません。ソース: Xposed ソースコード:

@Override
public void onListItemClick(ListView l, View v, int position, long id) {
    String packageName = (String) v.getTag();
    if (packageName == null)
        return;

    if (packageName.equals(NOT_ACTIVE_NOTE_TAG)) {
        Intent intent = new Intent(getActivity(), XposedInstallerActivity.class);
        intent.putExtra(XposedInstallerActivity.EXTRA_SECTION, XposedDropdownNavActivity.TAB_INSTALL);
        startActivity(intent);
        return;
    }

    Intent launchIntent = getSettingsIntent(packageName);
    if (launchIntent != null)
        startActivity(launchIntent);
    else
        Toast.makeText(getActivity(), getActivity().getString(R.string.module_no_ui), Toast.LENGTH_LONG).show();
}

したがって、アクティビティを作成するだけで十分ですが、それだけでは不十分だと思います。Eclipse で「ランチャー アクティビティ」にするか、CATEGORY_LAUNCHERインテント フィルターを追加して手動で行うこともできます。

それが機能する場合、アプリを Eclipse からテスト用の電話にプッシュすると、アプリが自動的に開きます (他のアプリと同様)。これが発生した場合、通常、アプリは Xposed 内でも開く必要があります。

たとえば、クラス内に置いたものは次のとおりです。

package xxx.xxx.xxx;

import android.os.Bundle;
import android.preference.PreferenceActivity;
import android.preference.PreferenceManager;

public class MainSettingsActivity extends PreferenceActivity {

    @SuppressWarnings("deprecation")
    @Override
    protected void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       // Setup a non-default and world readable shared preferences, so that 1- we know the name (necessary for XSharedPreferences()), 2- the preferences are accessible from inside the hook.
       PreferenceManager prefMgr = getPreferenceManager();
       prefMgr.setSharedPreferencesName("pref_mine");
       prefMgr.setSharedPreferencesMode(MODE_WORLD_READABLE);
       addPreferencesFromResource(R.xml.pref_settings);
    }

}

次に、メイン クラスのフック内で設定を使用します。

public class Main implements IXposedHookLoadPackage {
    public XSharedPreferences pref;

    @Override
    public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) throws Throwable {
        XSharedPreferences pref = new XSharedPreferences(Main.class.getPackage().getName(), "pref_mine"); // load the preferences using Xposed (necessary to be accessible from inside the hook, SharedPreferences() won't work)
        pref.makeWorldReadable();
        pref.reload();
        pref.getString("some_var", "default_value");
        ...
于 2015-09-14T00:14:25.927 に答える