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