1

ボタン(アクション)を定義して簡単な通知を作成しようとしています。私はそれを適切に表示し、自分のアクションのためにPendingIntentを作成することができました。私は、私のアクションがクリックされたときに呼ばれるはずのBroadcastReceiverも作成しました。しかし、onReceive()メソッドは呼び出されません。なぜ私は考えていない。あなたが.MainActivity$Receiverを使用しようとしている場合、私はまた、AndroidManifest.xmlに通知アクションでBroadcastReceiverが起動しないをクリック

でBroadcastReceiver

MainActivity.java

public class MainActivity extends AppCompatActivity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    Button notify = (Button) findViewById(R.id.notify); 

    notify.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 

      Intent dismissIntent = new Intent("action1"); 
      dismissIntent.setAction("action1"); 
      PendingIntent action1intent = PendingIntent.getBroadcast(MainActivity.this, (int) System.currentTimeMillis(), dismissIntent, PendingIntent.FLAG_CANCEL_CURRENT); 

      NotificationCompat.Builder mBuilder = 
        new NotificationCompat.Builder(MainActivity.this) 
          .setSmallIcon(R.drawable.ic_menu) 
          .setContentTitle("My notification") 
          .setContentText("Hello World!") 
          .addAction(R.drawable.ic_menu, "action 1", action1intent); 

      Intent resultIntent = new Intent(MainActivity.this, MainActivity.class); 
      TaskStackBuilder stackBuilder = TaskStackBuilder.create(MainActivity.this); 
      stackBuilder.addParentStack(MainActivity.class); 
      stackBuilder.addNextIntent(resultIntent); 

      PendingIntent resultPendingIntent = stackBuilder.getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT); 

      mBuilder.setContentIntent(resultPendingIntent); 
      NotificationManager mNotificationManager = 
        (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); 

      mNotificationManager.notify(0, mBuilder.build()); 
     } 
    }); 

} 

public class Receiver extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent intent) { 

     Log.d("log", "Receiving somthn"); 

     String whichAction = intent.getAction(); 

     if (whichAction.equals("action1")) { 
      MainActivity.makeToast("This is action 1", context); 
     } 
    } 
} 


public static void makeToast(String string, Context context) { 
    Toast.makeText(context, string, Toast.LENGTH_SHORT).show(); 
} 
} 

のAndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
package="com.example.orglce.notification"> 

<application 
    android:allowBackup="true" 
    android:icon="@mipmap/ic_launcher" 
    android:label="@string/app_name" 
    android:supportsRtl="true" 
    android:theme="@style/AppTheme"> 

    <receiver android:name=".MainActivity$Receiver"> 
     <intent-filter> 
      <action android:name="com.example.orglce.notification.BROADCAST" /> 
     </intent-filter> 
    </receiver> 

    <activity android:name=".MainActivity"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
</application> 

答えて

2

まずに、その後Receiverニーズを登録しますstaticクラスです。

第2に、dismissIntentは、アクション文字列としてaction1を(重複して)使用しますが、<intent-filter>com.example.orglce.notification.BROADCASTを使用します。これらは一致しません。 <intent-filter>を取り除き、action1を取り除き、new Intent(this, Receiver.class)を使用してIntentを作成してBroadcastReceiverを特定することをおすすめします。

+0

はい、うまくいきました。 '新しいインテント(this、Receiver.class)'に変更する。以前はすでに '新しいIntent(this、MainActivity.class)'を持っていましたが、動作しませんでした。私はMainActivity.classではなくReceiver.classにインテントを関連付ける必要があることを心に浮かべました。どうもありがとうございます! :) – orglce

関連する問題