繁体   English   中英

如何获取 Whatsapp 用户的状态并在我的 android 应用程序中显示?

[英]How can i fetch Whatsapp user's status and display in my android app?

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

请查看我想要制作包含所有状态的活动的图片。 就像图片一样

谢谢

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

对于 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
}

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

你去吧

    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,请参阅文件存在和 IS 目录,但 listFiles() 返回 null

file not found path文件的问题由此解决。

你可以试试这个路径。 它可能对你有帮助。

适用于Android-10及更高版本

File(Environment.getExternalStorageDirectory() + File.separator + "Android/media/com.whatsapp/WhatsApp/Media/.Statuses")

Android-10版本以下

File(Environment.getExternalStorageDirectory() + File.separator + "WhatsApp/Media/.Statuses")

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM