【问题标题】:How can i fetch Whatsapp user's status and display in my android app?如何获取 Whatsapp 用户的状态并在我的 android 应用程序中显示?
【发布时间】:2018-09-24 12:25:10
【问题描述】:

我想从 Whatsapp 获取实时状态到我的 android 活动中。是否有可能做到这一点?如果是,我们将非常感谢您的指导。

Please see the image i want to make an activity containing all the statuses. Just like the image

谢谢

【问题讨论】:

标签: java android whatsapp


【解决方案1】:

WhatsApp 商店向您的设备内存或 sd 卡 WhatsApp/Media/.Statuses 文件夹显示状态。此文件夹已隐藏。您可以从那里获取数据。

【讨论】:

    【解决方案2】:

    Kotlin 爱好者

       companion object {
        const val WHATSAPP_STATUS_FOLDER_PATH = "/WhatsApp/Media/.Statuses/"
       }
    
       fun getImagePath(): ArrayList<String> {
        // image path list
        val list: ArrayList<String> = ArrayList()
    
        // fetching file path from storage
        val file = File(Environment.getExternalStorageDirectory().toString() + WHATSAPP_STATUS_FOLDER_PATH)
        val listFile = file.listFiles()
    
        if (listFile != null && listFile.isNullOrEmpty()) {
            Arrays.sort(listFile, LastModifiedFileComparator.LASTMODIFIED_REVERSE)
        }
    
        if (listFile != null) {
            for (imgFile in listFile) {
                if (
                    imgFile.name.endsWith(".jpg")
                    || imgFile.name.endsWith(".jpeg")
                    || imgFile.name.endsWith(".png")
                ) {
                    val model = imgFile.absolutePath
                    list.add(model)
                }
            }
        }
    
        // return imgPath List
        return list
    }
    

    【讨论】:

      【解决方案3】:

      WhatsApp 用户状态的所有内容都本地存储在 /WhatsApp/.Statuses 文件夹中,文本状态除外。您可以简单地以网格视图加载文件夹中的所有图像和视频,并提供保存和共享选项。

      【讨论】:

        【解决方案4】:

        你去吧

            final String WHATSAPP_STATUSES_LOCATION = "/WhatsApp/Media/.Statuses";
            RecyclerView mRecyclerViewMediaList = findViewById(R.id.recyclerViewMedia);
            LinearLayoutManager mLinearLayoutManager = new LinearLayoutManager(this);
            mRecyclerViewMediaList.setLayoutManager(mLinearLayoutManager);
            ListAdapter recyclerViewMediaAdapter = new ListAdapter(MainActivity.this, this.getListFiles(new File(Environment.getExternalStorageDirectory().toString() + WHATSAPP_STATUSES_LOCATION)));
            mRecyclerViewMediaList.setAdapter(recyclerViewMediaAdapter);
        
        
        
          private ArrayList<File> getListFiles(File parentDir) {
            ArrayList<File> inFiles = new ArrayList<>();
            File[] files;
            files = parentDir.listFiles();
            if (files != null) {
                for (File file : files) {
                    Log.e("check", file.getName());
                    if (file.getName().endsWith(".jpg") ||
                            file.getName().endsWith(".gif") ||
                            file.getName().endsWith(".mp4")) {
                        if (!inFiles.contains(file))
                            inFiles.add(file);
                    }
                }
            }
            return inFiles;
        }
        

        适配器

         public class ListAdapter extends RecyclerView.Adapter<ListAdapter.MyViewHolder> {
            final Context context;
            final ArrayList<File> modelFeedArrayList;
            private static final String DIRECTORY_TO_SAVE_MEDIA_NOW = "/WhatsappStatus/";
        
            public ListAdapter(Context context, final ArrayList<File> modelFeedArrayList) {
                this.context = context;
                this.modelFeedArrayList = modelFeedArrayList;
            }
        
        
            @NonNull
            @Override
            public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
                View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.recyclerview_media_row_item, parent, false);
                return new MyViewHolder(view);
            }
        
            @Override
            public void onBindViewHolder(@NonNull final MyViewHolder holder, int position) {
        
                File currentFile = modelFeedArrayList.get(position);
        
                if (currentFile.getAbsolutePath().endsWith(".mp4")) {
                    holder.cardViewImageMedia.setVisibility(View.GONE);
                    holder.cardViewVideoMedia.setVisibility(View.VISIBLE);
                    Uri video = Uri.parse(currentFile.getAbsolutePath());
                    holder.videoViewVideoMedia.setVideoURI(video);
                    holder.videoViewVideoMedia.setOnPreparedListener(mp -> {
                        mp.setLooping(true);
                        holder.videoViewVideoMedia.start();
                    });
                } else {
                    holder.cardViewImageMedia.setVisibility(View.VISIBLE);
                    holder.cardViewVideoMedia.setVisibility(View.GONE);
                    Bitmap myBitmap = BitmapFactory.decodeFile(currentFile.getAbsolutePath());
                    holder.imageViewImageMedia.setImageBitmap(myBitmap);
                }
            }
        
        
            @Override
            public int getItemCount() {
                return modelFeedArrayList.size();
            }
        
            public static class MyViewHolder extends RecyclerView.ViewHolder {
                ImageView imageViewImageMedia;
                VideoView videoViewVideoMedia;
                CardView cardViewVideoMedia;
                CardView cardViewImageMedia;
        
        
                public MyViewHolder(@NonNull View itemView) {
                    super(itemView);
                    imageViewImageMedia = itemView.findViewById(R.id.imageViewImageMedia);
                    videoViewVideoMedia = itemView.findViewById(R.id.videoViewVideoMedia);
                    cardViewVideoMedia = itemView.findViewById(R.id.cardViewVideoMedia);
                    cardViewImageMedia = itemView.findViewById(R.id.cardViewImageMedia);
        
                }
            }
        }
        

        行 XML

        <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
            xmlns:tools="http://schemas.android.com/tools"
            android:layout_width="match_parent"
            android:layout_height="300dp"
            android:layout_margin="10dp">
        
            <androidx.cardview.widget.CardView
                android:id="@+id/cardViewVideoMedia"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_alignParentStart="true"
                android:layout_alignParentTop="true"
                android:visibility="gone">
                <VideoView
                    android:id="@+id/videoViewVideoMedia"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_weight="1" />
        
            </androidx.cardview.widget.CardView>
        
        
            <androidx.cardview.widget.CardView
                android:id="@+id/cardViewImageMedia"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_alignParentStart="true"
                android:layout_alignParentTop="true">
        
                <ImageView
                    android:id="@+id/imageViewImageMedia"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:layout_alignParentTop="true"
                    android:layout_alignParentEnd="true"
                    android:layout_weight="1"
                    android:scaleType="fitCenter"
                    android:contentDescription="@string/todo" />
        
        
            </androidx.cardview.widget.CardView>
        
        
        </RelativeLayout>
        

        添加到您的 AndroidManifest.xml。

        <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
        
        
        
         <application
                android:requestLegacyExternalStorage="true"
        

        Android 10 File.listFiles() 可能返回 null,请参阅 File exists and IS directory, but listFiles() returns null

        【讨论】:

          猜你喜欢
          • 2012-03-31
          • 1970-01-01
          • 1970-01-01
          • 2021-05-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多