दिलचस्प पोस्ट
हास्केल: "1 + 2" की तरह स्ट्रिंग का मूल्यांकन कैसे करें एक मावेन विरूपण साक्ष्य क्या है? वीएस2015 समुदाय संस्करण ऑफ़लाइन कैसे स्थापित करें Angularjs अनचाहे त्रुटि: जब V1.3 को माइग्रेट करना iPhone में प्रत्येक 60 सेकंड के बाद एक विधि कॉल करने के लिए अजगर से सूची से शब्दकोश बनाएं एसक्यूएल सर्वर 2005 कम्प्यूट किया गया कॉलम स्थिर है asio async_write को बढ़ावा दें: कैसे async_write कॉल interleaving नहीं? कैसे जावा में कुंजीपटल प्रेस अनुकरण? JSON के लिए XSLT बराबर javax.websocket क्लाइंट सरल उदाहरण Android में एक स्पिनर को कैसे अनुकूलित करें PHP में छवि का आकार बदलें जाँच करें कि कोई varchar एक संख्या (टीएसक्यूएल) है या नहीं ऑब्ज़र्वबल कलेक्शन और बाइंडिंगलिस्ट में अंतर

एंड्रॉइड नेटली इनकमिंग कॉल स्क्रीन की तरह सच कॉलर एंड्रॉइड ऐप की तरह विंडो पॉप अप करें

अपडेट – 09 मई 2013 * मैंने टोस्ट को प्रसारण रिसीवर की रीमेसिव विधि में लागू करने की कोशिश की क्योंकि टोस्ट एंड्रॉइड का एक मूल घटक है, लेकिन यह एंड्रॉइड 4.1 (जेली बीन) में भी प्रदर्शित नहीं हो रहा है।

मेरा विचार प्रसारण रिसीवर की रीसस्वी पद्धति में टोस्ट को कार्यान्वित करना था और बाद में हमारी जरूरतों के मुताबिक इसकी डिज़ाइन बदलकर प्रदर्शन की अवधि ट्यूनिंग करना था। लेकिन एक और समस्या यह है कि FindViewById प्रसारण रिसीवर में काम नहीं करता है, इसलिए मुझे लगता है कि टोस्ट को अनुकूलित करने के लिए हमें एक रैखिक लयआउट प्रोग्राम बना दिया है। *

अपडेटइनाम के बाद भी मुझे सटीक चीज नहीं मिल रही है जो मैं देख रहा हूं, लेकिन मैं सभी को वापस मिलूंगा; मैं उस पर काम कर रहा हूं वैसे भी, यह कोड अधिकांश Android फ़ोन के लिए काम करता है। अगर कोई इसके समाधान का उपयोग करने और पकड़ने जा रहा है, तो कृपया यहां लिखें ताकि सभी को लाभ मिल सके। आपके सभी उत्तरों के लिए धन्यवाद।

मैं एंड्रॉइड में आने वाले कॉलों के लिए एक प्रसारण रिसीवर विकसित कर रहा हूं और इनकमिंग कॉल प्राप्त कर रहा हूं, मैं देशी इनकमिंग कॉल स्क्रीन पर पॉप अप बढ़ाना चाहता हूं।

मैंने उस कोड को पूरा किया लेकिन अब समस्या यह है कि एंड्रॉइड 4.1 (जेली बीन) एपीआई स्तर 17 में जब फोन की घंटी बजती है, PHONE_STATE OFF HOOK PHONE_STATE रूप में आ रहा है, और अगर मैं कोई गतिविधि कह रहा हूं, तो उसे बुलाया जाता है, लेकिन इसके तहत कोड नहीं मिलता है निष्पादित हो जाओ मैं कोड सूचीबद्ध कर रहा हूं:

मेरा प्रसारण रिसीवर

 package com.example.popwindowonincomingcallscreen; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.telephony.TelephonyManager; import android.util.Log; public class IncomingBroadcastReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Log.d("IncomingBroadcastReceiver: onReceive: ", "flag1"); String state = intent.getStringExtra(TelephonyManager.EXTRA_STATE); Log.d("IncomingBroadcastReceiver: onReceive: ", state); if (state.equals(TelephonyManager.EXTRA_STATE_RINGING) || state.equals(TelephonyManager.EXTRA_STATE_OFFHOOK)) { Log.d("Ringing", "Phone is ringing"); Intent i = new Intent(context, IncomingCallActivity.class); i.putExtras(intent); i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); i.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); Wait.oneSec(); context.startActivity(i); } } } 

एक गतिविधि जिसे मैं बुला रहा हूं:

 import android.app.Activity; import android.os.Bundle; import android.telephony.TelephonyManager; import android.util.Log; import android.view.View.MeasureSpec; import android.view.Window; import android.view.WindowManager; import android.widget.TextView; public class IncomingCallActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { try { Log.d("IncomingCallActivity: onCreate: ", "flag2"); */ After this line, the code is not executed in Android 4.1 (Jelly Bean) only/* // TODO Auto-generated method stub super.onCreate(savedInstanceState); getWindow().addFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE); getWindow().addFlags( WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL); Log.d("IncomingCallActivity: onCreate: ", "flagy"); setContentView(R.layout.main); Log.d("IncomingCallActivity: onCreate: ", "flagz"); String number = getIntent().getStringExtra( TelephonyManager.EXTRA_INCOMING_NUMBER); TextView text = (TextView) findViewById(R.id.text); text.setText("Incoming call from " + number); } catch (Exception e) { Log.d("Exception", e.toString()); // TODO Auto-generated catch block e.printStackTrace(); } } } 

बाद

 try { Log.d("IncomingCallActivity: onCreate: ", "flag2"); } 

कोड एंड्रॉइड 4.1 (जेली बीन) में निष्पादित नहीं है, लेकिन अन्य संस्करणों में यह काम कर रहा है।

मैंने लगभग सभी तरीकों से कोशिश की है जो मैं कर सकता हूं। यह कोड देशी कॉल स्क्रीन पर एक पारभासी गतिविधि प्रदर्शित कर रहा है, और यह पृष्ठभूमि नियंत्रण को ब्लॉक नहीं करता है, जैसे कि फोन को चुनना। लेकिन मैं इसे सही कॉलर की तरह चाहता हूं। मैंने एक स्नैपशॉट संलग्न किया है कि कैसे आने वाली कॉल स्क्रीन पर सही कॉलर एक विंडो प्रदर्शित कर रहा है।

मैं एंड्रॉइड ऐप के लिए यह कार्यक्षमता कैसे प्राप्त करूं?

यह एक सच्ची कॉलर कैसे काम करता है:

यहां छवि विवरण दर्ज करें

मेरा वर्तमान आउटपुट:

यहां छवि विवरण दर्ज करें

Solutions Collecting From Web of "एंड्रॉइड नेटली इनकमिंग कॉल स्क्रीन की तरह सच कॉलर एंड्रॉइड ऐप की तरह विंडो पॉप अप करें"

मुझे यकीन नहीं है कि आपका कस्टम जीयूआई हमेशा एक डिफॉल्ट के ऊपर होगा, क्योंकि सिस्टम रिसीवर को प्रसारित करता है और आपका रिसीवर स्क्रीन के ऊपर GUI को प्रदर्शित करने की कोशिश कर रहा है। हमें यकीन नहीं है कि पहले कौन कहलाता है, लेकिन स्क्रीन के शीर्ष पर अपना जीयूआई बनाने के लिए एक मुश्किल कार्य है, जब फोन आपके फोन को आपकी गतिविधि को 1 सेकंड सेकेंड के बाद इस्तेमाल किए गए हैंडलर के बाद कॉल करता है।

 new Handler().postDelayed(new Runnable() { @Override public void run() { // TODO Auto-generated method stub Intent intent = new Intent(context, AcceptReject.class); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(intent); } }, 2000); 

मुझे आशा है कि यह आपकी मदद कर सकता है

super.onCreate विधि से पहले कोड को आज़माएं मुझे लगता है कि सुपर को कॉल करने के बाद कोड छोड़ दिया गया है। कुछ समय बाद इस प्रकार की चाल मेरे लिए काम करती थी

मैंने अभी एंड्रॉइड 4.2 (जेली बीन) इम्यूलेटर पर परीक्षण किया है, और यह सही कॉलर की तरह पूरी आने वाली कॉल स्क्रीन को अवरुद्ध करके एकदम सही काम करता है:

 public void onReceive(Context context, Intent intent) { WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); WindowManager.LayoutParams params = new WindowManager.LayoutParams( LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.TYPE_SYSTEM_ALERT | WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY, WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE, PixelFormat.TRANSPARENT); params.height = LayoutParams.MATCH_PARENT; params.width = LayoutParams.MATCH_PARENT; params.format = PixelFormat.TRANSLUCENT; params.gravity = Gravity.TOP; LinearLayout ly = new LinearLayout(context); ly.setBackgroundColor(Color.RED); ly.setOrientation(LinearLayout.VERTICAL); wm.addView(ly, params); } 

मेनिफेस्ट में:

 <receiver android:name="" android:enabled="true" > <intent-filter android:priority="-1"> <action android:name="android.intent.action.PHONE_STATE" /> </intent-filter> </receiver> 

मैं आने वाली कॉल स्क्रीन पर एक अतिरिक्त बटन जोड़कर, इसी तरह की कोशिश कर रहा हूं।

जवाब सैम एडम्स मेरे लिए काम कर रहे हैं, हालांकि मैं फोन को फोनस्टैट लास्टनर से फोन कर रहा हूं। इसके अलावा, उनके कोड में एकमात्र वास्तविक अंतर मैं एक लेआउट बढ़ा रहा हूं:

 overlay = (RelativeLayout) inflater.inflate(R.layout.overlay, null); wm.addView(overlay, params); 

यह एमुलेटरों के साथ-साथ एचटीसी वन एस (एंड्रॉइड 4.1.1 चल रहा है) पर काम कर रहा है।

आपको याद रखने की आवश्यकता है, जो कुछ भी ओवरले दृश्य जो आप जोड़ रहे हैं, उसके संदर्भ को रखते हुए, और इसे फिर से हटाएं (विंडो हटाए जाने वाले इंस्टेंस पर कॉल हटाए गए दृश्य), जब फ़ोन बेकार हो जाता है (जब श्रोता टेलीफ़ोनी प्रबंधक हो जाता है CALL_STATE_IDLE), अन्यथा आपका ओवरले स्क्रीन पर रहेगा।

  WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); if(overlay!=null) { wm.removeView(overlay); overlay = null; } 

मुझे लगता है कि आपको वर्णित परिणाम प्राप्त करने के लिए गतिविधि शुरू नहीं करनी चाहिए। आपको LayoutParams.TYPE_SYSTEM_OVERLAY वाले एक अलग दृश्य की आवश्यकता होती है। अपने लेआउट पैरामीटर में LayoutParams.TYPE_SYSTEM_OVERLAY सेट

आप इस दृश्य को स्क्रीन पर जहां कहीं भी चाहते हैं, या पूरी स्क्रीन को कवर कर सकते हैं।

यहां कोड की कुछ पंक्तियां दी गई हैं:

  _av = new ActivatorView(this); _avLayoutParams = new WindowManager.LayoutParams(0, 0, 0, 0, WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY, WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE, PixelFormat.OPAQUE); _avLayoutParams.screenBrightness = _fScreenBrightness = 20f; WindowManager wm = (WindowManager) getSystemService(WINDOW_SERVICE); wm.addView(_av, _avLayoutParams); 

https://bitbucket.org/gyrussolutions/yaab/src/f01cc8aff690cae1b1107287cb17835b8a3c1643/src/biz/gyrus/yaab/LightMonitorService.java?at=default#cl-338 – पूर्ण स्रोत कोड, इसे एक नमूना मानते हैं।

मैं भी इस पर काम कर रहा हूं (मैं आपको यहां समझने में गलत हो सकता है) आप जो हासिल करना चाहते हैं वह Android 4.2 (जेली बीन) में उस गतिविधि को प्रदर्शित करना है। मैंने गतिविधि को प्रदर्शित करने के लिए सिर्फ एक देरी रखी है। मैंने अलग-अलग कक्षा में फोनस्टैट लास्टनर का उपयोग किया है मैं कॉलर स्क्रीन पर नई गतिविधि प्रदर्शित करने में सक्षम हूं। यहां मेरा पूरा कोड है:

यहां छवि विवरण दर्ज करें

फ़ाइल माइबॉडकास्ट रीसियर.जावा

 public class MyBroadcastReceiver extends BroadcastReceiver { static CustomPhoneStateListener phoneStateListener; Context context; Intent intent; @Override public void onReceive(Context context, Intent intent) { this.context = context; this.intent = intent; // TODO Auto-generated method stub TelephonyManager telephonyManager = (TelephonyManager) context .getSystemService(Context.TELEPHONY_SERVICE); phoneStateListener = new CustomPhoneStateListener(context); telephonyManager.listen(phoneStateListener, PhoneStateListener.LISTEN_CALL_STATE); } } 

फ़ाइल CustomPhoneStateListener.java

 public class CustomPhoneStateListener extends PhoneStateListener { // private static final String TAG = "PhoneStateChanged"; Context context; // Context to make Toast if required private AudioManager amanager; Intent i1; public CustomPhoneStateListener(Context context) { super(); this.context = context; i1 = new Intent(context, YourActivity.class); i1.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); i1.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); } @Override public void onCallStateChanged(int state, String incomingNumber) { super.onCallStateChanged(state, incomingNumber); switch (state) { case TelephonyManager.CALL_STATE_IDLE: Toast.makeText(context, "Phone state Idle", Toast.LENGTH_LONG) .show(); break; case TelephonyManager.CALL_STATE_OFFHOOK: Toast.makeText(context, "Phone state Off hook", Toast.LENGTH_LONG) .show(); break; case TelephonyManager.CALL_STATE_RINGING: try { Thread.sleep(3000); context.startActivity(i1); } catch (Exception e) { e.getLocalizedMessage(); } default: break; } } 

और आपकी गतिविधि बनेगी जैसा आपने बनाया है … नोट: मुझे इस समस्या में भी कुछ समस्याएं आ रही हैं जो वे यहां हैं।

  1. जब कॉल बंद होती है तो क्लॉल (मिस्ड कॉल या अस्वीकार) गतिविधि बंद नहीं की जा रही है।
  2. मैं गतिविधि पर क्लिक करने में सक्षम नहीं हूं (मैं अपने ऐप के लिए एक बटन रखना चाहता हूं)
  3. यह केवल पहली बार काम करता है जब मैं दूसरी बार कॉल करता हूं, तो मेरा ऐप बंद हो जाता है (मुझे लगता है कि ऐसा इसलिए है क्योंकि कॉल समाप्त होने पर गतिविधि को बंद नहीं किया जा रहा है)

(इन समस्याओं के लिए सहायता स्वीकार की गई है। धन्यवाद।

अद्यतन करें

यहां छोटे डेमो की खोज है कि यह कैसे प्राप्त किया जाए।

  1. जब कॉल बंद होती है तो क्लॉल (मिस्ड कॉल या अस्वीकार) गतिविधि बंद नहीं की जा रही है। – हल किया
  2. मैं गतिविधि पर क्लिक करने में सक्षम नहीं हूं (मैं अपने ऐप के लिए एक बटन रखना चाहता हूं) – हल किया गया
  3. यह केवल पहली बार काम करता है जब मैं दूसरी बार कॉल करता हूं, तो मेरा ऐप बंद हो जाता है (मुझे लगता है कि ऐसा इसलिए है क्योंकि कॉल बंद होने पर गतिविधि को बंद नहीं किया जा रहा है) – हल किया गया

मेरी विधि:

  1. फोन कॉल की घटनाओं को प्राप्त करने के लिए रिसीवर का उपयोग करें
  2. उपरिशायी बनाने के लिए सेवा का उपयोग करें

     ps:wmParams.type = WindowManager.LayoutParams.TYPE_PHONE; 

हम एक समान समस्या का भी सामना कर रहे थे, जो पिन लॉक वाले डिवाइस पर ओवरले प्रदर्शित नहीं किया गया था। हमारे लिए काम करने वाला समाधान नीचे है:

 mWindowManager = (WindowManager) getSystemService(WINDOW_SERVICE); mParams = new LayoutParams( LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT, LayoutParams.TYPE_SYSTEM_ERROR, LayoutParams.FLAG_NOT_FOCUSABLE, PixelFormat.TRANSLUCENT); 

यह LayoutParams.TYPE_SYSTEM_ERROR था। LayoutParams.TYPE_SYSTEM_ERROR ने अंतर बनाया है

 new Handler().postDelayed(new Runnable() { @Override public void run() { // TODO Auto-generated method stub Intent i = new Intent(context, CallingIncoming.class); i.putExtras(intent); i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK /*| Intent.FLAG_ACTIVITY_CLEAR_TASK*/); context.startActivity(i); } }, 450);//It will help you to delay your screen and after it your screen will be top of default app screen 

एक सरल प्रसारण रिसीवर का उपयोग करें और इस कोड को प्रसारण रिसीवर में डाल दें:

 public void onReceive(final Context context, final Intent intent) { Log.v(LOG_TAG, "Receieved notification about network status"); WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); WindowManager.LayoutParams params = new WindowManager.LayoutParams( WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.TYPE_SYSTEM_ALERT | WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY, WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE, PixelFormat.TRANSPARENT); params.height = WindowManager.LayoutParams.MATCH_PARENT; params.width = WindowManager.LayoutParams.MATCH_PARENT; params.format = PixelFormat.TRANSLUCENT; params.gravity = Gravity.TOP; LinearLayout ly = new LinearLayout(context); ly.setBackgroundColor(Color.RED); ly.setOrientation(LinearLayout.VERTICAL); wm.addView(ly, params); }