android अधिसूचना बार पर मीडिया नियंत्रक बटन कैसे रखें?




mediacontroller android-music-player (4)

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

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


यहां उपरोक्त उदाहरण है जो नए एपीआई के लिए सही तरीके से किया गया है

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

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();
    }
}

फिर आपको बटन के लिए एक एक्सएमएल फ़ाइल बनाने की जरूरत है। यह एक साधारण है:

<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"/>

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

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

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 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)

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

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) और अपने गतिविधि में इरादे को ध्यान में रखें (इरादा इरादा) वापस कॉल करें:

@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");
        }
    }
}

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

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

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





android-music-player