Вопрос по android, java – Как начать деятельность, когда пользователь нажимает на уведомление?

13

Я пытаюсь преобразовать некоторый код, который я нашел в учебнике, для собственного использования. Первоначально код запускал системный список контактов, когда пользователь нажимал на уведомление, сгенерированное моим приложением. Я пытаюсь начатьActivity вместо запуска списка контактов, но он не работает. Точнее, ничего не происходит. Там нет ошибки, и мойActivity тоже не загружается. Окно уведомлений исчезает после нажатия, а оригиналActivity все еще виден

Вот мой код:

<code>public class MyBroadcastReceiver extends BroadcastReceiver {
    private NotificationManager mNotificationManager;
    private int SIMPLE_NOTFICATION_ID;

    public void onReceive(Context context, Intent intent){
        Bundle extras = intent.getExtras();

        String deal = (String) extras.get("Deal");
        String title = "Deal found at " + (String) extras.get("LocationName");

        mNotificationManager = (NotificationManager)context.getSystemService(Context.NOTIFICATION_SERVICE);
        Notification notifyDetails = new Notification(R.drawable.icon, title,System.currentTimeMillis());

        Class ourClass;
        try {
            ourClass = Class.forName("com.kjdv.gpsVegas.ViewTarget");
            Intent startMyActivity = new Intent(context, ourClass);

            PendingIntent myIntent = PendingIntent.getActivity(context, 0,startMyActivity, 0);
            notifyDetails.setLatestEventInfo(context, title, deal, myIntent);
            notifyDetails.flags |= Notification.FLAG_AUTO_CANCEL;
            notifyDetails.flags |= Notification.DEFAULT_SOUND;
            mNotificationManager.notify(SIMPLE_NOTFICATION_ID, notifyDetails);
        }
        catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }
}
</code>

Это моя запись вAndroidManifext.xml файл...

<code>  <activity android:name=".ViewTarget" android:label="@string/app_name" >
        <intent-filter>
            <action android:name="com.kjdv.gpsVegas.ViewTarget" />
            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
   </activity>
</code>

А это мойActivity что я хочу запустить ...

<code>public class ViewTarget extends ListActivity {
    public ListAdapter getListAdapter() {
        return super.getListAdapter();
    }

    public ListView getListView() {
        return super.getListView();
    }

    public void setListAdapter(ListAdapter adapter) {
        super.setListAdapter(adapter);
    }

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.locations);
        Log.v("db", "Inside ViewTarget");
    }
}
</code>
Я понял проблему. Я оставил имя пакета в объявлении активности в файле манифеста. Я изменил & lt; активность android: имя = & quot; .ViewTarget & quot; Android: метка = & Quot; @ строка / имя_приложение & Quot; & GT; на & lt; активность android: name = & quot; com.kjdv.gpsVegas.ViewTarget & quot; Android: метка = & Quot; @ строка / имя_приложение & Quot; / & GT ;. Теперь все работает. Спасибо! Kevin

Ваш Ответ

6   ответов
1

Activity изIntent, вам нужно добавить флаг:

intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

Это верно, даже если вы объявите класс вIntentконструктор.

Error: User Rate Limit Exceeded Kevin
1

            public class TestActivity extends Activity {
private static final int UNIQUE_ID = 882;

public static NotificationManager nm;
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    nm = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);

        Intent navigationIntent = new Intent();


    navigationIntent.setClass(classname.this, MainActivity.class);


    PendingIntent pi = PendingIntent.getActivity(this, 0, navigationIntent,
            0);

    String body = "New notificattion added!!!";
    String title = "Notification";


    Notification n = new Notification(R.drawable.icon, body,
            System.currentTimeMillis());

            //this is for giving number on the notification icon

    n.number = Integer.parseInt(responseText);

    n.setLatestEventInfo(this, title, body, pi);
    n.defaults = Notification.DEFAULT_ALL;

    nm.notify(UNIQUE_ID, n);
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded Kevin
Error: User Rate Limit Exceeded Kevin
22

ть NotificationCompat вместо этого. Этот класс включен в последний пакет поддержки.

Intent notificationIntent = new Intent(context, ViewTarget.class);
PendingIntent contentIntent = PendingIntent.getActivity(context,
                0, notificationIntent,
                PendingIntent.FLAG_CANCEL_CURRENT);

NotificationManager nm = (NotificationManager) context
                .getSystemService(Context.NOTIFICATION_SERVICE);

Resources res = context.getResources();
NotificationCompat.Builder builder = new NotificationCompat.Builder(context);
builder.setContentIntent(contentIntent)
       .setSmallIcon(R.drawable.app_icon)
       .setLargeIcon(BitmapFactory.decodeResource(res, R.drawable.app_icon))
       .setTicker(payload)
       .setWhen(System.currentTimeMillis())
       .setAutoCancel(true)
       .setContentTitle("Message")
       .setContentText(payload);
Notification n = builder.getNotification();

n.defaults |= Notification.DEFAULT_ALL;
nm.notify(0, n);

РЕДАКТИРОВАТЬ: Я знаю, что это старая тема / вопрос, но этот ответ помог мне показать активность при нажатии на уведомление. Для тех людей, которые не работают, возможно, это потому, что вы «не зарегистрированы». активность в вашем манифесте. Например:

<activity
   android:name="com.package.name.NameOfActivityToLaunch"
   android:label="Title of Activity" >
   <intent-filter>
     <action android:name="com.package.name.NAMEOFACTIVITYTOLAUNCH" />

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

И, надеюсь, это должно сработать. Надеюсь, это помогло ...

Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded Kevin
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded Kevin
Error: User Rate Limit Exceeded Kevin
3

в файле манифеста.

Неправильно:

activity android:name=".ViewTarget" android:label="@string/app_name" 

Правильный:

activity android:name="com.kjdv.gpsVegas.ViewTarget" android:label="@string/app_name" 
Error: User Rate Limit Exceeded
1

<activity android:name=".ViewTarget" android:label="@string/app_name" />

Также не уверен, будет ли работать этот код:

ourClass = Class.forName("com.kjdv.gpsVegas.ViewTarget"); Intent startMyActivity = new Intent(context, ourClass);

Можете ли вы попробовать это так вместо этого:

Intent startMyActivity = new Intent(context, ViewTarget.class);

Error: User Rate Limit Exceeded Kevin
Error: User Rate Limit ExceedednotifyError: User Rate Limit Exceeded(int) System.currentTimeMillis()Error: User Rate Limit ExceededSIMPLE_NOTIFICATION_ID ?
Error: User Rate Limit Exceeded Kevin
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
3

Intent startMyActivity = new Intent(context, ourClass);
startMyActivity .setAction(Intent.ACTION_MAIN);
startMyActivity .addCategory(Intent.CATEGORY_LAUNCHER);

оно работает

Похожие вопросы