0

因此无法正确配置或运行。在通知被按下时创建一个动作,Android

尝试获取通知以打开MainActivity3文件,然后让它运行我想要的任何内容,只需在它的目标是播放声音。

完全新的Android开发,但认为我沿着正确的路线。 你会看到我有两种方法,但不能得到任何工作。

MainActivity.java

package com.example.firstapp; 

import android.media.MediaPlayer; 
//import android.media.RingtoneManager; 
import android.os.Bundle; 
import android.os.Vibrator; 
import android.app.Activity; 
import android.app.Notification; 
import android.app.NotificationManager; 
import android.app.PendingIntent; 
import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.content.IntentFilter; 
import android.support.v4.app.NotificationCompat; 
import android.view.Menu; 
//import android.app.*; 
import android.view.*; 
import android.widget.*; 

public class MainActivity extends Activity { 

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

    //Notification 
    NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this) 
     .setSmallIcon(R.drawable.follownavi) 
      .setContentTitle("Hey") 
      .setContentText(""); 

    PendingIntent pendingIntent; 
    //Intent intent = new Intent(); 

    Intent intent= new Intent(MainActivity3.onNewIntent(), MainActivity3.class); 
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_SINGLE_TOP); 

    //intent.setClass(getApplicationContext(),MainActivity3.class); 
    pendingIntent = PendingIntent.getActivity(getApplicationContext(), 0, intent, 0); 
    mBuilder.addAction(R.drawable.follownavi,"LISTEN",pendingIntent); 
    mBuilder.setContentIntent(pendingIntent); 

    NotificationManager notificationManager = (NotificationManager)  getSystemService(Context.NOTIFICATION_SERVICE); 
    notificationManager.notify(1, mBuilder.build()); 



@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.activity_main, menu); 
    return true; 
} 

@Override 
public boolean onTouchEvent(MotionEvent event) { 
    //get touch location 
    int x = (int)event.getX(); 
    int y = (int)event.getY(); 
    //put on screen 
    TextView tester = (TextView) findViewById(R.id.textView1); 
    tester.setText("this is x:" + x + " and this is y:" + y); 

    //move image 
    ImageView iv = (ImageView) findViewById(R.id.NaviFollow); 

    if(y > 222) 
    { 
    iv.setX(x - 125); 
    iv.setY(y - 350); 


    //cause vibration 
    Vibrator v = (Vibrator) getSystemService(VIBRATOR_SERVICE); 
    v.vibrate(300); 
    } 

return true; 
} 



} 

一旦通知被调用,它的出现意味着运行这个文件 MainActivity3

package com.example.firstapp; 


import android.app.Activity; 
import android.media.MediaPlayer; 
import android.os.Bundle; 

public class MainActivity3 extends Activity { 

protected Context onNewIntent() 
{ 
MediaPlayer mp2 = MediaPlayer.create(getApplicationContext(), R.raw.listen); 
mp2.start(); 
return null; 


} 
} 

的错误似乎是呼叫是静态的,但它想无效,非常困惑 错误代码

无法对非静态方法onNewIntent()返回静态引用米类MainActivity3 MainActivity.java/firstApp/src目录/ COM /例子/ firstapp线38

,如果我改变方法,以适应那么媒体播放器getApplicationContext做更多的研究后,不会工作

我觉得清单威力停止它,但仍然不确定Android的结构。

清单

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
package="com.example.firstapp" 
android:versionCode="1" 
android:versionName="1.0" > 
<uses-permission android:name="android.permission.VIBRATE"/> 
<uses-sdk 
    android:minSdkVersion="14" 
    android:targetSdkVersion="17" /> 


<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> 



<application 
    android:allowBackup="true" 
    android:icon="@drawable/navibutton" 
    android:label="Navi" 
    android:theme="@style/AppTheme" > 



    <activity 
     android:name="com.example.firstapp.MainActivity" 
     android:label="@string/app_name" > 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

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

    </activity> 
      <receiver android:enabled="true" android:name=".BootUpReceiver" 
    android:permission="android.permission.RECEIVE_BOOT_COMPLETED"> 
           <intent-filter> 
      <action android:name="android.intent.action.BOOT_COMPLETED" /> 
      <category android:name="android.intent.category.DEFAULT" /> 
    </intent-filter>  
    </receiver> 
    </application> 

</manifest> 

请帮助尽可能变得非常boged下来,不自禁地放弃

+0

你知道,它应该叫acitivity3当你点击的通知,当它出现呢?对于通知,最好使用getApplicationContext,而不是getBaseContext。 – 2013-02-12 17:51:05

+0

是的,我希望它在通知被点击时调用它,我尝试改变为getApplicationContext,但不知道我明白它有什么不同。基本上,当点击通知要从MainActivity3运行一个函数 – user1524122 2013-02-12 18:11:52

回答

0

你是不是用的PendingIntent做任何事情。你应该将它设置在通知生成器生成调用()之前

mBuilder.setContentIntent(pendingIntent); 

你也必须意识到,建立一个新的活动和的onCreate做的事情是不是用于执行操作的好主意。如果你想要,例如在同一个活动中显示一个敬酒,你可以在Intent中设置特定的数据,并在onNewIntent()中执行。 接受的答案有一个配置处理新意向的例子。

Android: new Intent() starts new instance with android:launchMode="singleTop"

+0

ok没有真正帮助,我认为它现在正在拾取正确的文件和正确的方法/函数,但是它们的声明有问题。目前MainActivity中的通知构造函数是 – user1524122 2013-02-13 13:10:49

相关问题