微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

android – 如何从通知中触发广播接收器

我想从通知中触发广播接收器.当我点击通知按钮时,它会显示以下错误

“Unable to instantiate receiver com.example.testservice.mybroad:
java.lang.ClassCastException: com.example.testservice.mybroad cannot
be cast to android.content.broadcastReceiver”

*更新/编辑及其现在工作*
1)嘿伙计们,请帮助处理从通知到广播接收器的2个按钮
如何将通知广播触发器中的额外值传递给按下或暂停播放按钮的接收器?
2)现在我的按钮工作,但当我点击通知文本时,它不会让我进入我的活动.任何帮助

我为2个按钮编写了这个代码,意图是额外的

RemoteViews layout = new RemoteViews(getPackageName(),R.layout.notification);
            layout.setTextViewText(R.id.notification_title,getString(R.string.app_name));
            Intent clickIntent = new Intent();
            clickIntent.putExtra("button","pause");
            clickIntent.setAction(ACTION_DIALOG);

            PendingIntent pendingIntent = PendingIntent.getbroadcast(getApplicationContext(),pendingRequestCode,clickIntent,pendingFlag);
            layout.setonClickPendingIntent(R.id.notification_button,pendingIntent);
            builder.setContent(layout);


             layout = new RemoteViews(getPackageName(),getString(R.string.app_name));
            Intent click = new Intent();
            clickIntent.putExtra("Button","play");
            clickIntent.setAction(ACTION_DIALOG);

            PendingIntent pi1 = PendingIntent.getbroadcast(getApplicationContext(),click,pendingFlag);
            layout.setonClickPendingIntent(R.id.notification_button1,pi1);
            builder.setContent(layout);

mybroad接收器文件

Bundle extrasBundle = intent.getExtras();
    String str = (String) extrasBundle.get("button");       
    Toast.makeText(context,str,Toast.LENGTH_SHORT).show();

    context.stopService(new Intent(context,myPlayService.class));

这是我的代码

void showNotification() {
     int pendingRequestCode = 0;
        int pendingFlag = 0;

        final Resources res = getResources();
        final notificationmanager notificationmanager = (notificationmanager) getSystemService(
                NOTIFICATION_SERVICE);
        Intent intent = new Intent(MainActivity.this,mybroad.class);
        PendingIntent pi= PendingIntent.getActivity(this,intent,0);
        Notification.Builder builder = new Notification.Builder(this)
                .setSmallIcon(R.drawable.ic_action_search)
                .setAutoCancel(true)
                .setTicker("this is notification")
                .setContentIntent(getDialogPendingIntent("Tapped the notification entry."));


            // Sets a custom content view for the notification,including an image button.
            RemoteViews layout = new RemoteViews(getPackageName(),getString(R.string.app_name));
            Intent clickIntent = new Intent();
            clickIntent.setAction(ACTION_DIALOG);

            PendingIntent pendingIntent = PendingIntent.getbroadcast(getApplicationContext(),pendingIntent);
            builder.setContent(layout);

            // Notifications in Android 3.0 Now have a standard mechanism for displaying large
            // bitmaps such as contact avatars. Here,we load an example image and resize it to the
            // appropriate size for large bitmaps in notifications.
            Bitmap largeIconTemp = BitmapFactory.decodeResource(res,R.drawable.notification_default_largeicon);
            Bitmap largeIcon = Bitmap.createScaledBitmap(
                    largeIconTemp,res.getDimensionPixelSize(android.R.dimen.notification_large_icon_width),res.getDimensionPixelSize(android.R.dimen.notification_large_icon_height),false);
            largeIconTemp.recycle();

            builder.setLargeIcon(largeIcon);

        notificationmanager.notify(NOTIFICATION_DEFAULT,builder.getNotification());
 }


    PendingIntent getDialogPendingIntent(String dialogText) {
        return PendingIntent.getActivity(
                this,dialogText.hashCode(),// Otherwise prevIoUs PendingIntents with the same
                                       // requestCode may be overwritten.
                new Intent(ACTION_DIALOG)
                        .putExtra(Intent.EXTRA_TEXT,dialogText)
                        .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK),0);
    }

mybroad.class

public class mybroad extends broadcastReceiver{

@Override
public void onReceive(Context context,Intent intent) {
    // Todo Auto-generated method stub
    Toast.makeText(context,"received",myPlayService.class));

}

}

清单文件是:

<application
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
    <activity
        android:name=".MainActivity"
        android:label="@string/title_activity_main" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />


            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
          </activity>

     <receiver android:name=".mybroad">
        <intent-filter >
<action android:name="android.intent.action.MEDIA_BUTTON"/>
    </intent-filter>

        </receiver>

    <service android:name="com.example.testservice.myPlayService" android:icon="@drawable/ic_action_search" android:label="@string/app_name" android:enabled="true"/>


</application>

解决方法

因为mybroad是一个活动对象,而不是广播对象……

而不是从活动扩展(继承),然后创建一个扩展broadcastreceiver的内部类,然后直接从broadcastreceiver继承.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐