दिलचस्प पोस्ट
ब्रॉडकास्ट रिसीवर से केवल गतिविधि को सूचित करें यदि यह अग्रभूमि में है मेनू आइटम कार्रवाई बार पर नहीं दिखाए जा रहे हैं एफ # में सामान्य प्रकार की सूची के लिए ऑब्जेक्ट को कैसे डालें Angular.JS: समान नियंत्रक साझा करने वाले दृश्य, दृश्य बदलते समय मॉडल डेटा रीसेट करता है मैं एक आवेदन में विभिन्न गतिविधियों को लॉन्च करने के लिए कई आइकनों कैसे प्राप्त करूं? एफ में "थ्रॉटलड" एसिंक डाउनलोड जावास्क्रिप्ट समापन काम नहीं कर रहा है ISO 8601- संगत स्ट्रिंग को java.util.Date में कनवर्ट करना मल्टीपार्ट / फॉर्म-डेटा पोस्ट से फ़ाइल इनपुट पढ़ना कैसे रनटाइम पर असेंबली खोज पथ में फ़ोल्डर जोड़ने के लिए .net? त्वरित प्रकार सबसे खराब मामला JQuery – $ परिभाषित नहीं है एक क्वेरी में दो तालिकाओं से हटाना डायनेमो डीडीबी में मदसिज़्म ऑब्जेक्ट नाम से पहले एकल और एक डबल अंडरस्कोर का क्या अर्थ है?

अधिसूचना बार पर मीडिया कंट्रोलर बटन को कैसे रखा जाए?

मैं एक म्यूजिक प्लेयर एप्लिकेशन बना रहा हूं मैं सूचना नियंत्रक पर मीडिया नियंत्रक दिखाना चाहता हूं, जबकि मेरा आवेदन पृष्ठभूमि में चल रहा है ऐसा लगता है कि Google प्लेयर

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

यह कैसे करना है?

Solutions Collecting From Web of "अधिसूचना बार पर मीडिया कंट्रोलर बटन को कैसे रखा जाए?"

आपके ऐप में मीडिया प्लेयर नियंत्रक प्राप्त करने के लिए बस इस का पालन करें:

इस विधि को अपने मुख्य गतिविधि में कॉल करें

public void showNotification(View view){ new MyNotification(this); finish(); } 

एक नया MynotificationClass बनाएँ

 public class MyNotification extends Notification { private Context ctx; private NotificationManager mNotificationManager; @SuppressLint("NewApi") public MyNotification(Context ctx){ super(); this.ctx=ctx; String ns = Context.NOTIFICATION_SERVICE; mNotificationManager = (NotificationManager) ctx.getSystemService(ns); CharSequence tickerText = "Shortcuts"; long when = System.currentTimeMillis(); Notification.Builder builder = new Notification.Builder(ctx); @SuppressWarnings("deprecation") Notification notification=builder.getNotification(); notification.when=when; notification.tickerText=tickerText; notification.icon=R.drawable.ic_launcher; RemoteViews contentView=new RemoteViews(ctx.getPackageName(), R.layout.messageview); //set the button listeners setListeners(contentView); notification.contentView = contentView; notification.flags |= Notification.FLAG_ONGOING_EVENT; CharSequence contentTitle = "From Shortcuts"; mNotificationManager.notify(548853, notification); } public void setListeners(RemoteViews view){ //radio listener Intent radio=new Intent(ctx,HelperActivity.class); radio.putExtra("DO", "radio"); PendingIntent pRadio = PendingIntent.getActivity(ctx, 0, radio, 0); view.setOnClickPendingIntent(R.id.radio, pRadio); //volume listener Intent volume=new Intent(ctx, HelperActivity.class); volume.putExtra("DO", "volume"); PendingIntent pVolume = PendingIntent.getActivity(ctx, 1, volume, 0); view.setOnClickPendingIntent(R.id.volume, pVolume); //reboot listener Intent reboot=new Intent(ctx, HelperActivity.class); reboot.putExtra("DO", "reboot"); PendingIntent pReboot = PendingIntent.getActivity(ctx, 5, reboot, 0); view.setOnClickPendingIntent(R.id.reboot, pReboot); //top listener Intent top=new Intent(ctx, HelperActivity.class); top.putExtra("DO", "top"); PendingIntent pTop = PendingIntent.getActivity(ctx, 3, top, 0); view.setOnClickPendingIntent(R.id.top, pTop);*/ //app listener Intent app=new Intent(ctx, com.example.demo.HelperActivity.class); app.putExtra("DO", "app"); PendingIntent pApp = PendingIntent.getActivity(ctx, 4, app, 0); view.setOnClickPendingIntent(R.id.btn1, pApp); } } 

एक सहायक सक्रियता कक्षा बनाएं

 public class HelperActivity extends Activity { private HelperActivity ctx; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); ctx = this; String action = (String) getIntent().getExtras().get("DO"); if (action.equals("radio")) { //Your code } else if (action.equals("volume")) { //Your code } else if (action.equals("reboot")) { //Your code } else if (action.equals("top")) { //Your code } else if (action.equals("app")) { //Your code } if (!action.equals("reboot")) finish(); } @Override protected void onDestroy() { // TODO Auto-generated method stub super.onDestroy(); } } 

Notificationlayout.xml के लिए XML लेआउट

 <?xml version="1.0" encoding="UTF-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="fill_parent" android:layout_height="fill_parent" > <TextView android:id="@+id/msglbl" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="test" /> <TextView android:id="@+id/message" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_toRightOf="@+id/msglbl" /> <Button android:id="@+id/btn1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="play" android:layout_margin="10dp"/> </RelativeLayout> 

यहाँ ऊपर दिए गए उदाहरण नए एपीआई से सही तरीके से किए गए हैं

आपके मुख्य में, जब आप एक अधिसूचना शुरू करना चाहते हैं, तो क्लास को इन्स्तांत करना है:

 NotificationPanel nPanel = new NotificationPanel(MyActivity); 

और जब आप अधिसूचना रद्द करना चाहते हैं: (क्योंकि यह चालू सूचना है)

 nPanel.notificationCancel(); 

फिर अधिसूचना कॉलर के लिए क्लास बनाएं:

 public class NotificationPanel { private Context parent; private NotificationManager nManager; private NotificationCompat.Builder nBuilder; private RemoteViews remoteView; public NotificationPanel(Context parent) { // TODO Auto-generated constructor stub this.parent = parent; nBuilder = new NotificationCompat.Builder(parent) .setContentTitle("Parking Meter") .setSmallIcon(R.drawable.ic_launcher) .setOngoing(true); remoteView = new RemoteViews(parent.getPackageName(), R.layout.notificationview); //set the button listeners setListeners(remoteView); nBuilder.setContent(remoteView); nManager = (NotificationManager) parent.getSystemService(Context.NOTIFICATION_SERVICE); nManager.notify(2, nBuilder.build()); } public void setListeners(RemoteViews view){ //listener 1 Intent volume = new Intent(parent,NotificationReturnSlot.class); volume.putExtra("DO", "volume"); PendingIntent btn1 = PendingIntent.getActivity(parent, 0, volume, 0); view.setOnClickPendingIntent(R.id.btn1, btn1); //listener 2 Intent stop = new Intent(parent, NotificationReturnSlot.class); stop.putExtra("DO", "stop"); PendingIntent btn2 = PendingIntent.getActivity(parent, 1, stop, 0); view.setOnClickPendingIntent(R.id.btn2, btn2); } public void notificationCancel() { nManager.cancel(2); } } 

फिर वापसी वर्ग को जोड़ें जो लंबित इरादे स्वीकार करें:

 public class NotificationReturnSlot extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); String action = (String) getIntent().getExtras().get("DO"); if (action.equals("volume")) { Log.i("NotificationReturnSlot", "volume"); //Your code } else if (action.equals("stopNotification")) { //Your code Log.i("NotificationReturnSlot", "stopNotification"); } finish(); } } 

तो आपको बटन के लिए एक XML फ़ाइल बनाने की आवश्यकता है। यह एक सरल है:

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="horizontal" > <Button android:id="@+id/btn1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_margin="10dp" android:text="volume" /> <Button android:id="@+id/btn2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_margin="10dp" android:text="Stop" /> <TextView android:id="@+id/message" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_toRightOf="@+id/msglbl" /> 

अंतिम और कम से कम, मैनिफेस्ट फाइल नहीं:

  <activity android:name=".NotificationReturnSlot" android:launchMode="singleTask" android:taskAffinity="" android:excludeFromRecents="true"/> 

आपको एक दूरस्थ दृश्य बनाने और इसे एक अधिसूचना के रूप में दिखाने की आवश्यकता है

अनुवर्ती दस्तावेज़ देखें

स्थिति सूचनाएं (कस्टम नोटिफिकेशन लेआउट बनाना)

सूचना से अपने मूल गतिविधि को वापस / भेजें; उपरोक्त उदाहरण के लिए आवश्यक परिवर्तन:

 NotificationPanel nPanel = new NotificationPanel(MyActivity) 

अधिसूचना बनाने वाले एक ही स्टैक और गतिविधि को फिर से शुरू करने के लिए अधिसूचना बटन का उपयोग कैसे करें:

1) सुनिश्चित करें कि गतिविधि को नष्ट नहीं किया गया है (वैकल्पिक), वापस कार्य को वापस करने के लिए बटन को बदलें और इसे नष्ट न करें:

 @Override void onBackPressed() { Log.d("onBackPressed", "onBackPressed Called"); moveTaskToBack(true); } 

2) मेनैन्फ़ेस्ट में यह गतिविधि में जोड़ें:

 android:launchMode="singleTop" 

3) अपने इन्टेंट इंस्टेंस के लिए उन झंडे जोड़ें: (वॉल्यूम आशय का उदाहरण है)

 Intent volume = new Intent(....); .... volume.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); volume.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); 

और साथ ही आप निम्न (वैकल्पिक) जोड़ सकते हैं:

 volume.setAction(Intent.ACTION_MAIN); volume.addCategory(Intent.CATEGORY_LAUNCHER) 

4) लंबित उदाहरण में किसी भी झंडे का उपयोग नहीं करते हैं:

 PendingIntent btn1 = PendingIntent.getActivity(parent, 0, volume, 0); 

5) और onNewIntent (आशय इरादे) वापस कॉल के साथ अपनी गतिविधि में आशय पकड़ो:

 @Override protected void onNewIntent(Intent intent) { // TODO Auto-generated method stub super.onNewIntent(intent); setIntent(intent); Log.i("onNewIntent", intent.toString()); // DEBUG - very useful if (intent.getExtras() != null) { // As the Intent we send back has extras, if it don't, it is a different Intent. it is possible to use TRY {} CATCH{} for this as well to find if Extras is NULL. String tmp; tmp = intent.getExtras().getString("DO"); if (tmp != null) { if (tmp.equals("volume")) Log.i("onNewIntent", "Volume"); else if (tmp.equals("stop")) Log.i("onNewIntent", "Stop"); else Log.i("onNewIntent", "Didnt capture the extras of the Intent - " + tmp); } else { Log.i("onNewIntent", "No new Intent"); } } }