Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何将变量传递给broadCastReceiver_Android_Eclipse_Broadcastreceiver_Android Manifest - Fatal编程技术网

Android 如何将变量传递给broadCastReceiver

Android 如何将变量传递给broadCastReceiver,android,eclipse,broadcastreceiver,android-manifest,Android,Eclipse,Broadcastreceiver,Android Manifest,我正在做我的最后一个项目,请帮助我,我必须在下周末之前提交 我正在开发一个基于上下文过滤来电的应用程序,首先我想获取来电号码并将其传递给活动,以便在数据库中搜索号码并返回结果,我不知道如何从广播接收器获取变量并再次传递给它,我的意思是获取并将变量传递给1个broadcastReceiver,所以我决定使用2个broadcastReceiver,在其中一个上获取传入号码并传递给我的mainclass,我的MainCals在数据库中搜索传入号码并将结果传递给filterCall广播类,但我遇到了问题

我正在做我的最后一个项目,请帮助我,我必须在下周末之前提交 我正在开发一个基于上下文过滤来电的应用程序,首先我想获取来电号码并将其传递给活动,以便在数据库中搜索号码并返回结果,我不知道如何从广播接收器获取变量并再次传递给它,我的意思是获取并将变量传递给1个broadcastReceiver,所以我决定使用2个broadcastReceiver,在其中一个上获取传入号码并传递给我的mainclass,我的MainCals在数据库中搜索传入号码并将结果传递给filterCall广播类,但我遇到了问题。请帮助我,谢谢

这是我的callActivity广播类,它接收传入号码并传递给我的Mainclass

    public class CallblockingActivity extends  BroadcastReceiver {


          Context context = null;
          private static final String TAG = "Phone call";
          private ITelephony telephonyService;
          String incommingNumber;
           Intent intent;
           String n;

        @Override

          public void onReceive(Context context, Intent intent) {
                   Log.v(TAG, "Receving....");
                   TelephonyManager telephony = (TelephonyManager) 
                   context.getSystemService(Context.TELEPHONY_SERVICE);  
                     try {
                         Class c = Class.forName(telephony.getClass().getName());
                         Method m = c.getDeclaredMethod("getITelephony");
                         m.setAccessible(true);
                         telephonyService = (ITelephony) m.invoke(telephony);           
                         Bundle b = intent.getExtras();
                         incommingNumber = b.getString(TelephonyManager.EXTRA_INCOMING_NUMBER);
                         Log.v(TAG, incommingNumber);
                         Intent i = new Intent(context, Mainclass.class);
                         i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                         i.putExtra("n",incommingNumber);
                         context.startActivity(i);
                         Log.v(TAG, incommingNumber);

                     }
                     catch (Exception e) {
                      e.printStackTrace();
                     }

            }

  }   
这是我的主类,它从CallBlockingActivityBroadcast类中获取传入号码,搜索数据库并返回一个布尔值

 public class Mainclass  extends Activity{
Context context = null;
Boolean isit= false;
String TAG;

   public void onCreate(Bundle savedInstanceState) {
        Log.v(TAG,"onCreate");
        super.onCreate(savedInstanceState);
       setContentView(R.layout.main);


       Intent b= getIntent();
        String incomiingnumber1= b.getStringExtra("n");
        Log.v(TAG,incomiingnumber1 + "incomenuber from broadcast receiver");
        DataBaseBON searching= new DataBaseBON(Mainclass.this);
       searching.open();
        isit= searching.searchnumber(incomiingnumber1);
        String ss= new Boolean(isit).toString();       
       Toast.makeText(getApplicationContext(), ss, Toast.LENGTH_SHORT);
       Log.v(TAG, ss+ "yeeeeeeees it is it");
       searching.close();

      //  I think My problem is here
       Intent in = new Intent(context, FilterCall.class);
       Bundle bb = new Bundle();
       bb.putString("keyvalue", "ss");
       in.putExtras(bb);
       startActivity(in);

   }

}
这是我的Filter Broadcast类,它拒绝通话或将手机设置为静音模式

public class FilterCall  extends BroadcastReceiver {

private ITelephony telephonyService;
String TAG;
@Override
public void onReceive(Context context, Intent intent) {
    // TODO Auto-generated method stub


    Log.v(TAG, "Filtering...");
    TelephonyManager telephony = (TelephonyManager) 
    context.getSystemService(Context.TELEPHONY_SERVICE);  
      try {
         Class c = Class.forName(telephony.getClass().getName());
         Method m = c.getDeclaredMethod("getITelephony");
          m.setAccessible(true);
          telephonyService = (ITelephony) m.invoke(telephony);          

          String result = intent.getStringExtra("keyvalue");


                if (result=="true") {
                try {
                    telephonyService.silenceRinger();
                    telephonyService.endCall();
                } catch (RemoteException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }


           }


      }
      catch (Exception e) {
       e.printStackTrace();
      }

 }

}
我面对这个问题:

    08-05 16:58:50.468: W/IInputConnectionWrapper(1500): showStatusIcon on inactive   InputConnection
    08-05 16:58:50.958: V/(1500): Filtering...
  08-05 16:58:51.118: V/Phone call(1500): Receving....
 08-05 16:58:51.118: V/Phone call(1500): +60172214866
 08-05 16:58:51.138: V/Phone call(1500): +60172214866
   08-05 16:58:51.168: V/(1500): onCreate
 08-05 16:58:51.248: V/(1500): +60172214866incomenuber from broadcast receiver
 08-05 16:58:51.278: I/Database(1500): SQLiteDatabase open path:  /data/data/com.vahid.davoudi/databases/databasebon.db
 08-05 16:58:51.338: V/(1500): trueyeeeeeeees it is it
   08-05 16:58:51.338: I/Database(1500): SQLiteDatabase close path:  /data/data/com.vahid.davoudi/databases/databasebon.db
 08-05 16:58:51.348: A/dalvikvm(1500): Exception!!! threadid=1: thread exiting with         uncaught exception (group=0x4001d858)
 08-05 16:58:51.388: E/AndroidRuntime(1500): FATAL EXCEPTION: main
 08-05 16:58:51.388: E/AndroidRuntime(1500): java.lang.RuntimeException: Unable to start  activity ComponentInfo{com.vahid.davoudi/com.vahid.davoudi.Mainclass}:  java.lang.NullPointerException
   08-05 16:58:51.388: E/AndroidRuntime(1500):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663)
 08-05 16:58:51.388: E/AndroidRuntime(1500):    at  android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
  08-05 16:58:51.388: E/AndroidRuntime(1500):   at android.app.ActivityThread.access$2300(ActivityThread.java:125)
 08-05 16:58:51.388: E/AndroidRuntime(1500):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
  08-05 16:58:51.388: E/AndroidRuntime(1500):   at android.os.Handler.dispatchMessage(Handler.java:99)
   08-05 16:58:51.388: E/AndroidRuntime(1500):  at android.os.Looper.loop(Looper.java:123)
  08-05 16:58:51.388: E/AndroidRuntime(1500):   at android.app.ActivityThread.main(ActivityThread.java:4627)
  08-05 16:58:51.388: E/AndroidRuntime(1500):   at java.lang.reflect.Method.invokeNative(Native Method)
  08-05 16:58:51.388: E/AndroidRuntime(1500):   at java.lang.reflect.Method.invoke(Method.java:521)
  08-05 16:58:51.388: E/AndroidRuntime(1500):   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858)
  08-05 16:58:51.388: E/AndroidRuntime(1500):   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
  08-05 16:58:51.388: E/AndroidRuntime(1500):   at dalvik.system.NativeStart.main(Native Method)
  08-05 16:58:51.388: E/AndroidRuntime(1500): Caused by: java.lang.NullPointerException
  08-05 16:58:51.388: E/AndroidRuntime(1500):   at android.content.ComponentName.<init>(ComponentName.java:75)
      08-05 16:58:51.388: E/AndroidRuntime(1500):   at android.content.Intent.<init>(Intent.java:2690)
  08-05 16:58:51.388: E/AndroidRuntime(1500):   at com.vahid.davoudi.Mainclass.onCreate(Mainclass.java:39)
 08-05 16:58:51.388: E/AndroidRuntime(1500):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
  08-05 16:58:51.388: E/AndroidRuntime(1500):   at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
   08-05 16:58:51.388: E/AndroidRuntime(1500):  ... 11 more
  08-05 17:03:51.408: W/PrintK(1500): m.vahid.davoudi(1500) sends SIGKILL to        m.vahid.davoudi(1500)
08-05 16:58:50.468:W/IInputConnectionWrapper(1500):在非活动InputConnection上显示状态图标
08-05 16:58:50.958:V/(1500):过滤。。。
2008-05 16:58:51.118:V/电话(1500):接收。。。。
电话号码(1500):+60172214866
电话号码(1500):+60172214866
08-05 16:58:51.168:V/(1500):再次创建
08-05 16:58:51.248:V/(1500):+60172214866来自广播接收器的Incomenuber
08-05 16:58:51.278:I/数据库(1500):SQLiteDatabase开放路径:/data/data/com.vahid.davoudi/databases/databasebon.db
2008-05 16:58:51.338:V/(1500):没错,就是这样
08-05 16:58:51.338:I/数据库(1500):SQLiteDatabase关闭路径:/data/data/com.vahid.davoudi/databases/databasebon.db
08-05 16:58:51.348:A/dalvikvm(1500):例外!!!threadid=1:线程以未捕获异常退出(组=0x4001d858)
08-05 16:58:51.388:E/AndroidRuntime(1500):致命异常:主
08-05 16:58:51.388:E/AndroidRuntime(1500):java.lang.RuntimeException:无法启动活动组件信息{com.vahid.davoudi/com.vahid.davoudi.Mainclass}:java.lang.NullPointerException
08-05 16:58:51.388:E/AndroidRuntime(1500):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663)
08-05 16:58:51.388:E/AndroidRuntime(1500):在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
08-05 16:58:51.388:E/AndroidRuntime(1500):在android.app.ActivityThread.access$2300(ActivityThread.java:125)
08-05 16:58:51.388:E/AndroidRuntime(1500):在android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
08-05 16:58:51.388:E/AndroidRuntime(1500):在android.os.Handler.dispatchMessage(Handler.java:99)上
08-05 16:58:51.388:E/AndroidRuntime(1500):在android.os.Looper.loop(Looper.java:123)上
08-05 16:58:51.388:E/AndroidRuntime(1500):位于android.app.ActivityThread.main(ActivityThread.java:4627)
08-05 16:58:51.388:E/AndroidRuntime(1500):位于java.lang.reflect.Method.Invokenactive(本机方法)
08-05 16:58:51.388:E/AndroidRuntime(1500):位于java.lang.reflect.Method.invoke(Method.java:521)
08-05 16:58:51.388:E/AndroidRuntime(1500):在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858)
08-05 16:58:51.388:E/AndroidRuntime(1500):位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
2008-05 16:58:51.388:E/AndroidRuntime(1500):在dalvik.system.NativeStart.main(本机方法)
08-05 16:58:51.388:E/AndroidRuntime(1500):由以下原因引起:java.lang.NullPointerException
08-05 16:58:51.388:E/AndroidRuntime(1500):在android.content.ComponentName.(ComponentName.java:75)
08-05 16:58:51.388:E/AndroidRuntime(1500):在android.content.Intent.(Intent.java:2690)
08-05 16:58:51.388:E/AndroidRuntime(1500):位于com.vahid.davoudi.Mainclass.onCreate(Mainclass.java:39)
08-05 16:58:51.388:E/AndroidRuntime(1500):在android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)上
08-05 16:58:51.388:E/AndroidRuntime(1500):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)上
2008-05 16:58:51.388:E/AndroidRuntime(1500):。。。还有11个
2008-05 17:03:51.408:W/PrintK(1500):m.vahid.davoudi(1500)向m.vahid.davoudi(1500)发送SIGKILL
这是我的舱单

 <?xml version="1.0" encoding="utf-8"?>
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.vahid.davoudi"
android:versionCode="1"
android:versionName="1.0" >

<uses-permission android:name="android.permission.MODIFY_PHONE_STATE" />
<uses-permission android:name="android.permission.CALL_PHONE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-sdk android:minSdkVersion="8" />

 <application
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name" >
    <activity
        android:name=".Mainclass"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

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


    <activity
        android:name=".CallBlockingOrginalActivity"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity
        android:name=".ViewDatabase"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.VIEWDB" />

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

    <receiver  android:name=".CallblockingActivity">
        <intent-filter   >
            <action android:name="android.intent.action.PHONE_STATE" />
        </intent-filter>
    </receiver>

    <receiver  android:name=".FilterCall">
        <intent-filter  android:priority="100" >
            <action android:name="android.intent.action.PHONE_STATE" />
        </intent-filter>
    </receiver>
  </application>

 </manifest>

Mainclass.java的第39行有一个nullPointerException

“b”可能返回null

Intent b = getIntent();


对你的问题有一些建议

1) 您不需要在广播接收器中添加那么多代码来获取传入号码。而您可以直接使用下面的代码来获取此信息

String number = intent.getStringExtra(TelephonyManager.EXTRA_INCOMING_NUMBER);
2) 您不需要启动活动来搜索数据库,您可以通过receive方法从Receiver直接在数据库中搜索此数字(希望您的数据库不是太大,这可能会花费更多时间来导致ANR)

3) 您可以直接在第一个接收器中的另一个接收器中执行您正在执行的操作。它将删除大量代码,使之成为一种好方法

对于代码中的本地问题,您使用以下代码发送广播消息

//  I think My problem is here
       Intent in = new Intent(context, FilterCall.class);
       Bundle bb = new Bundle();
       bb.putString("keyvalue", "ss");
       in.putExtras(bb);
       startActivity(in);
但是您正在调用startActivity而不是sendBroadcast方法,因为FilterCall是一个广播接收器

你应该这样做

       Intent in = new Intent("Intent Action which your receiver is listening to");
       in.putExtras("keyvalue", "ss");
      sendBroadcast(in);

亲爱的@Ankit谢谢你的建议,但你是什么意思?我可以在接收时从接收者直接在数据库中搜索此号码,请告诉我如何仅使用一个broadCastReceiver,因为在第一个broadCastReceiver中,我只接收传入号码并通过发送意图开始新活动,那么,如何在同一个广播接收器中返回结果呢
       Intent in = new Intent("Intent Action which your receiver is listening to");
       in.putExtras("keyvalue", "ss");
      sendBroadcast(in);