2012-07-09 24 views
1

好吧,我会在前言中说明我正在使用钛,所以我认为这会让您的口腔不好。所以,我很抱歉我在Android方面的知识缺乏。从我的通知接收器启动另一项活动

所以,我已经设置了一个接收GCM通知的东西。我可以将它们正确地发送到我的应用程序,并且代码运行并尝试在单击它时启动我的应用程序。然而,它只是给我这个在logcat中:

I/ActivityManager( 307): START {act=com.geneca.journaling.mobile.GenecaJournalingActivity cat=[android.intent.category.LAUNCHER] flg=0x34000000 bnds=[0,102][720,230] u=0} from pid -1 
W/InputMethodManagerService( 307): Window already focused, ignoring focus gain of: [email protected] attribute=null 

我得到了C2DM从第三方接收的东西,我一直试图修改它做什么,我需要,但我清楚地做一些事情不完全正确。

这里是在onMessage:

@Override 
protected void onMessage(Context context, Intent intent) { 
    Log.d(LCAT, "Message received"); 

    HashMap data = new HashMap(); 
    for (String key : intent.getExtras().keySet()) { 
     Log.d(LCAT, "Message key: " + key + " value: " 
       + intent.getExtras().getString(key)); 

     String eventKey = key.startsWith("data.") ? key.substring(5) : key; 
     data.put(eventKey, intent.getExtras().getString(key)); 
    } 
    if (C2dmModule.getInstance() == null) { 
     int icon = 0x7f020000; // get this from R.java 
     CharSequence tickerText = "Geneca Journaling"; 
     long when = System.currentTimeMillis(); 

     Bundle extras = intent.getExtras(); 
     CharSequence contentTitle = "Rate your journal"; 
     CharSequence contentText = "Notification Content"; 
     String title = extras.getString("title"); 
     String message = extras.getString("message"); 
     if(title != null) { 
      contentTitle = title; 
     } 
     if (message != null) { 
      contentText = message; 
     } 

     //Intent notificationIntent = new Intent(this, C2DMReceiver.class); 

     Intent launcherintent = new Intent("com.geneca.journaling.mobile.GenecaJournalingActivity"); 
     launcherintent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.  FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_CLEAR_TOP); 
     launcherintent 
       .setComponent(ComponentName 
         .unflattenFromString("com.geneca.journaling.mobile.GenecaJournalingActivity")); 
     launcherintent.addCategory("android.intent.category.LAUNCHER"); 


     PendingIntent contentIntent = PendingIntent.getActivity(this, 0, 
       launcherintent, 0); 

     // the next two lines initialize the Notification, using the 
     // configurations above 

     Notification notification = new Notification(icon, tickerText, when); 

     notification.defaults = Notification.DEFAULT_ALL; 
     notification.flags = Notification.FLAG_AUTO_CANCEL; 
     notification.setLatestEventInfo(context, contentTitle, contentText, 
       contentIntent); 
     String ns = Context.NOTIFICATION_SERVICE; 
     NotificationManager mNotificationManager = (NotificationManager) getSystemService(ns); 
     mNotificationManager.notify(1, notification); 
    } else 
     C2dmModule.getInstance().sendMessage(data); 
} 

这里是我的清单的东西(我认为)

<android xmlns:android="http://schemas.android.com/apk/res/android"> 
    <manifest> 
     <activity android:name=".GenecaJournalingActivity"/> 
     <permission 
      android:name="com.geneca.journaling.mobile.permission.C2D_MESSAGE" android:protectionLevel="signature"/> 
     <uses-permission android:name="com.geneca.journaling.mobile.permission.C2D_MESSAGE"/> 
     <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE"/> 
     <uses-permission android:name="android.permission.WAKE_LOCK"/> 
     <application> 
      <service android:name="com.findlaw.c2dm.C2DMReceiver"/> 
      <receiver 
       android:name="com.google.android.c2dm.C2DMBroadcastReceiver" android:permission="com.google.android.c2dm.permission.SEND"> 
       <intent-filter> 
        <action android:name="android.intent.action.BOOT_COMPLETED"/> 
        <category android:name="android.intent.category.HOME"/> 
       </intent-filter> 
       <intent-filter> 
        <action android:name="com.google.android.c2dm.intent.RECEIVE"/> 
        <category android:name="com.geneca.journaling.mobile"/> 
       </intent-filter> 
       <intent-filter> 
        <action android:name="com.google.android.c2dm.intent.REGISTRATION"/> 
        <category android:name="com.geneca.journaling.mobile"/> 
       </intent-filter> 
      </receiver> 
     </application> 
    </manifest> 
</android> 

也有在不同的地方另一个明显的部分,因为钛是如何处理的事情:

<android:manifest> 
    <permission android:name="com.geneca.journaling.mobile.permission.C2D_MESSAGE" android:protectionLevel="signature" /> 
    <uses-permission android:name="com.geneca.journaling.mobile.permission.C2D_MESSAGE" /> 

    <!-- This app has permission to register and receive message --> 
    <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" /> 

    <!-- Send the registration id to the server --> 
    <uses-permission android:name="android.permission.INTERNET" /> 

    <!-- App must have this permission to use the library --> 
    <uses-permission android:name="android.permission.WAKE_LOCK" /> 
    <activity android:name="com.geneca.journaling.mobile.GenecaJournalingActivity"/> 

    <application> 
      <!-- In order to use the c2dm library, an 
       application must declare a class with the name C2DMReceiver, in its 
       own package, extending com.google.android.c2dm.C2DMBaseReceiver 

       It must also include this section in the manifest, replacing 
       "com.google.android.apps.chrometophone" with its package name. 
      --> 
     <service android:name="com.findlaw.c2dm.C2DMReceiver" /> 

     <!-- Only google service can send data messages for the app. If permission is not set - 
      any other app can generate it --> 
     <receiver android:name="com.google.android.c2dm.C2DMBroadcastReceiver" android:permission="com.google.android.c2dm.permission.SEND"> 

      <!-- Start receiver on boot --> 
      <intent-filter> 
       <action android:name="android.intent.action.BOOT_COMPLETED"/> 
       <category android:name="android.intent.category.HOME"/> 
      </intent-filter> 

      <!-- Receive the actual message --> 
      <intent-filter> 
       <action android:name="com.google.android.c2dm.intent.RECEIVE" /> 
       <category android:name="com.geneca.journaling.mobile" /> 
      </intent-filter> 
      <!-- Receive the registration id --> 
      <intent-filter> 
       <action android:name="com.google.android.c2dm.intent.REGISTRATION" /> 
       <category android:name="com.geneca.journaling.mobile" /> 
      </intent-filter> 
     </receiver> 

    </application> 
</android:manifest> 

如果应用程序已经打开,它会运行一些Titanium代码,我认为我将能够弄清楚,但是如果应用程序没有打开,它会在onMessage中找到我无法弄清楚的东西。

任何帮助,将不胜感激。谢谢。

回答

0

这条线:

Intent launcherintent = new Intent("com.geneca.journaling.mobile.GenecaJournalingActivity"); 

创建一个具有行动com.geneca.journaling.mobile.GenecaJournalingActivity一个新的意图。

这是你想要的吗?

Intent intent = new Intent(Intent.ACTION_MAIN); 
intent.setComponent(new ComponentName("com.package.address","com.package.address.MainActivity")); 
    startActivity(intent); 

Intent LaunchIntent = getPackageManager().getLaunchIntentForPackage("com.package.address"); 
startActivity(LaunchIntent); 
+0

这不是在同一个应用程序,我想。 Titanium负责管理创建Java并为我的主应用程序编译它,但是我正在编译独立于此的C2DM接收器,因此GenecaJournalingActivity甚至不存在于该上下文中。 (在旁注中,我已经决定将来我不打算使用Titanium ...) – 2012-07-09 21:00:27

+0

已更新的代码。无论如何,我的意思是你的行为是不正确的。 – Ran 2012-07-09 21:04:36

+0

好吧,让我这个错误:'msg:android.content.ActivityNotFoundException:无法找到明确的活动类{com.geneca.journaling.mobile/com.geneca.journaling.mobile.MainActivity};' – 2012-07-09 21:39:02

相关问题