1

メイン アクティビティをウィジェットから起動しようとしていますが、インテント コンテンツも送信しています。私がそうしようとしている理由は、メイン アクティビティ (つまり、音声ログイン) 内から特定のメソッドを起動するためです。ここでは、テスト目的でトーストを作成しました。そのため、ウィジェット コード内では次のようにします。

Intent intent = new Intent(context, LogInActivity.class);

intent.putExtra("button_clicked","hello");
PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, 0);
// Get the layout for the App Widget and attach an on-click listener
// to the button
RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget);
views.setOnClickPendingIntent(R.id.imageButton1, pendingIntent);

そして、メイン (LogInActivity) 内で次のことを行います。

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_login);
    Intent myIntent = getIntent();

    Toast.makeText(getApplicationContext(),
            myIntent.getStringExtra("button_clicked"),
            Toast.LENGTH_SHORT)
            .show();

しかし、何も表示されません。セカンダリ アクティビティを呼び出して、それぞれからインテント コンテンツを受け取ると、まったく同じスニペットが機能します。メインアクティビティからインテントコンテンツを読み取る方法についてのアイデア、または少なくとも誰かがこれは不可能だと言ってくれるので、別の実装を見つける必要があります。

編集: Android マニフェスト エントリと二次活動の詳細を追加する

<activity
    android:name="SplashActivity"
    android:label="@string/app_name"
    android:screenOrientation="portrait">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>
<activity android:name=".LogInActivity"
          android:label="@string/title_activity_login"
          android:screenOrientation="portrait">
</activity>
<activity android:name=".TransactionActivity"
          android:label="@string/title_activity_transaction"
          android:screenOrientation="portrait">
</activity>

二次的な活動では、最初に同じスクリプトを呼び出すだけです。残りのコードはこの点に影響を与えるべきではないと考えています。

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_transaction);

    Intent myIntent = getIntent();
    Toast.makeText(getApplicationContext(),
            myIntent.getStringExtra("button_clicked"),
            Toast.LENGTH_SHORT)
            .show();
4

2 に答える 2

0

私はちょうど解決策を見つけました。問題は、私のメイン アクティビティによって受信された複数のインテントにあるようです。私は明らかにそれらの間違った意図を読んだので、NULL値です。それぞれのインテントをユニークにする方法を始めましたが、

intent.setAction("my action");

インテントの作成でトリックを行ったのですが、LogInActivity で受信したときに優先されたのでしょうか。よくわかりませんが、結局、少なくとも内容を読むことができました。

于 2012-08-07T10:41:58.507 に答える
0

ウィジェットでこれを試してみてください

Intent i = new Intent(context, top.class);
i.putExtra("widget", "1");
PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, i, 0);
views.setOnClickPendingIntent(R.id.imagebutton, pendingIntent);

そしてこれはメインアクティビティで

if(getIntent().getStringExtra("widget")!=null)
{
Log.i("INDEX", getIntent().getStringExtra("widget"));
widget = Integer.parseInt(getIntent().getStringExtra("widget"));
}
else
{
 Log.i("INDEX", "NULL");
}

nullかどうかを確認でき、私のウィジェットでは問題なく動作しています

于 2012-08-06T10:09:52.117 に答える